首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

对子进程的Bash等待即使在子进程仍在运行时也会返回

,这是因为Bash中的等待命令(wait)会使当前进程暂停执行,直到指定的子进程结束。无论子进程是否仍在运行,等待命令都会立即返回。

等待命令通常与后台运行的子进程一起使用,以确保在继续执行其他命令之前,子进程已经完成。等待命令的语法如下:

wait PID

其中,PID是要等待的子进程的进程ID。如果未指定PID,则等待命令将等待所有子进程的结束。

等待命令的应用场景包括:

  1. 后台任务管理:当在Bash中启动后台任务时,可以使用等待命令等待任务的完成,以便在任务完成后执行其他操作。
  2. 并行任务控制:在并行执行多个子任务时,可以使用等待命令等待所有子任务的完成,以便在所有任务完成后进行下一步操作。
  3. 进程间通信:等待命令可以与其他进程间通信机制(如管道、共享内存等)结合使用,以实现进程间的同步和互斥。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储、人工智能等。具体推荐的产品和产品介绍链接地址如下:

  1. 云服务器(ECS):提供弹性计算能力,支持多种操作系统和应用场景。了解更多:https://cloud.tencent.com/product/cvm
  2. 云数据库(CDB):提供高性能、可扩展的数据库服务,支持多种数据库引擎。了解更多:https://cloud.tencent.com/product/cdb
  3. 云存储(COS):提供安全可靠的对象存储服务,适用于各种数据存储和传输场景。了解更多:https://cloud.tencent.com/product/cos
  4. 人工智能(AI):提供多种人工智能服务,包括图像识别、语音识别、自然语言处理等。了解更多:https://cloud.tencent.com/product/ai

以上是腾讯云提供的一些与云计算相关的产品,可以根据具体需求选择适合的产品来支持云计算领域的开发和运维工作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何在Bash等待多个子进程完成,并且当其中任何一个进程以非零退出状态结束时,使主进程返回一个非零退出码?

问题 如何在 Bash 脚本中等待该脚本启动多个子进程完成,并且当这其中任意一个进程以非零退出码结束时,让该脚本返回一个非零退出码? 简单脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建进程退出状态,并且当任何进程以非零代码结束时,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊 sleep 函数,它将睡眠秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们每个进程完成时确实获取了它返回代码...3") num_procs=${#procs[@]} # 数组中元素个数 echo "num_procs = $num_procs" # 作为进程运行命令并把 pid 存储到数组中 pids

10000

【Linux】进程概念与进程状态

另外,同一个程序重新被运行时进程id可能与之前不一样,因为它代码和数据需要重新从磁盘中加载;但是它进程id一定是一样,因为它们都是通过 bash 来执行; 3、通过系统调用创建进程 我们可以通过系统调用接口...\n"); } return 0; } 可以看到,结果和我们预期一样,进程 ppid 是 父进程 pid,父进程 ppid 是 bash,同时,对于父进程,fork 函数返回进程...pid,对于进程,fork 返回 0。...1125之后,由于父进程中没有对子进程退出状态代码进行读取,所以进程变成了 Z 状态,并且进程后面还提示了 defunct (失效,不再使用),此时,如果父进程一直不对不对子进程进行读取,那么子进程就会变成僵尸进程...,bash读取父进程退出状态;第二,进程被领养后变成了后台进程

5.6K00
  • 100个Linux命令(7)-进程管理

    cp这个子进程执行过程中,父进程bash进入睡眠状态(不仅是因为cpu只有一颗情况下一次只能执行一个进程,还因为进程等待),并等待被唤醒,此刻bash无法和人类交互。...前台进程执行时,其父进程睡眠,因为cpu只有一颗,即使是多颗cpu,因为执行流(进程等待)原因而只能执行一个进程,要想实现真正多任务,应该使用进程内多线程实现多个执行流。...后台进程 若在执行命令时,命令结尾加上符号"&",它会进入后台。将命令放入后台,立即返回进程,并返回该后台进程jobid和pid,所以后台进程进程不会进入睡眠。...例如: cp /etc/fstab /tmp/ & [1] 8701 将进程放入后台后,立即返回其父进程,一般对于手动放入后台进程都是bash下进行,所以立即返回bash环境。...另外,shell中后台进程终端被关闭时脱离终端,因此不受shell和终端控制。例如shell脚本中后台进程,再如"(sleep 10 &)"。

    1.7K20

    【Linux】进程控制

    echo是内建命令,打印都是bash内部变量数据。?是一个变量名。 echo $?表示是父进程获取到,最近一个进程退出退出码。 main函数返回值叫做进程退出码。...返回./myprocess 退出码,第二个echo ?返回上一个echo 虽然echo $?没有创建进程,但它是由父进程执行,所以他影响?值。...OS就会提前终止进程。 我们把代码里野指针注释掉,此时代码正常运行,一直循环。此时我们给该进程发11号信号,该进程即使没有错误,收到信号后,进行对应报错。...exit底层是调用_exit。 由上面的结论可得,缓冲区_exit之上,不然_exit冲刷缓冲区。...(查看进程退出码) 非阻塞等待 我们用大部分接口都是阻塞等待接口,阻塞等待时,父进程干不了别的事,一直等待进程退出。下面介绍非阻塞等待

    11010

    【Linux】万字解读<进程控制>:创建&中止&等待&替换

    #include pid_t fork(void); 返回值:进程返回0 进程返回进程id,出错返回-1 【2】fork函数中写时拷贝 通常,父子代码共享...-9信号,有时显示其他信号 信号具体内容可以看YY后续信号博客 ※ctrl + c能强制退出——信号终止 三.进程等待 1.进程等待基本介绍 通过wait/waitpid方式,让父进程(一般...)对子进程进行 资源回收 等待过程 2.进程等待必要性 进程退出,父进程如果不管不顾,就可能造成 ‘僵尸进程问题,进而造成内存泄漏——进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼” kill...父进程通过 进程等待 方式,回收进程资源,获取进程退出信息 有时候进程 等待硬件资源 ,利用wait进程等待把自己挂起 3.如何进行等待(wait&waitpid) 【1】wait函数参数与返回值介绍...),执行橙色部分(父进程) 本质:进程和父进程同时存在——>进程变成 僵尸状态 ——>等待结束时, 进程消失 ,只剩下父进程 【2】waitpid函数参数与返回值介绍&演示 返回值: 当正常返回时候

    9210

    python—subprocess、gl

    像Linux进程那样,一个进程可以fork一个进程,并让这个子进程exec另外一个程序。Python中,我们通过标准库中subprocess包来fork一个进程,并运行一个外部程序。...subprocess.call() 父进程等待进程完成 返回退出信息(returncode,相当于Linux exit code) subprocess.check_call() 父进程等待进程完成...我们必须调用对象wait()方法,父进程才会等待 (也就是阻塞block) 例1(父进程等待进程): #!...child完成,而是直接运行print 例2(父进程等待进程): #!...child2输出文本被存放在PIPE中,直到communicate()方法从PIPE中读取出PIPE中文本;communicate()是Popen对象一个方法,该方法会阻塞父进程,直到进程完成

    1.5K20

    初探PHP多进程

    此函数创建了一个新进程后,进程继承父进程当前上下文,和父进程一样从pcntl_fork()函数处继续向下执行,只是获取到pcntl_fork()返回值不同,我们便能从判断返回值来区分父进程进程...)返回值大于1来确实当前进程是父进程; 而在进程中,此函数返回值会是固定值0,我们可以通过判断pcntl_fork()返回值为0来确定子进程; 而pcntl_fork()函数执行失败时,会在父进程返回...分发信号处理器 我们通过进程接收进程传来信号,判断进程状态,来对子进程进行管理。...callback函数对子进程处理; 处理进程 对子进程处理方法有: posix_kill():此函数并不能顾名思义,它通过向进程发送一个信号来操作进程需要要时可以选择给进程发送进程终止信号来终止进程...; pcntl_waitpid():等待返回fork进程状态,如果指定进程在此函数调用时已经退出(俗称僵尸进程),此函数将立刻返回,并释放进程所有系统资源,此进程可以避免进程变成僵尸进程

    1.5K80

    Linux进程基础

    bash 23774 16939 ps -o pid,ppid,cmd 我们可以看到,第二个进程bash是第一个进程sudo进程,而第三个进程ps是第二个进程进程。...这个函数会有两次返回,将进程PID返回给父进程,0返回进程。实际上,进程总可以查询自己PPID来知道自己进程是谁,这样,一对父进程进程就可以随时查询对方。...由此,就可以进程建立之后,让它执行与父进程不同功能。...在这个信息里,解释该进程为什么退出。父进程得知进程终结时,有责任对该进程使用wait系统调用。这个wait函数能从内核中取出进程退出信息,并清空该信息在内核中所占据空间。...当然,一个糟糕程序完全可能造成进程退出信息滞留在内核中状况(父进程对子进程调用wait函数),这样情况下,进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。

    5K40

    Linux进程基础

    -bash 23774 16939 ps -o pid,ppid,cmd 我们可以看到,第二个进程bash是第一个进程sudo进程,而第三个进程ps是第二个进程进程。...这个函数会有两次返回,将进程PID返回给父进程,0返回进程。实际上,进程总可以查询自己PPID来知道自己进程是谁,这样,一对父进程进程就可以随时查询对方。...由此,就可以进程建立之后,让它执行与父进程不同功能。...在这个信息里,解释该进程为什么退出。父进程得知进程终结时,有责任对该进程使用wait系统调用。这个wait函数能从内核中取出进程退出信息,并清空该信息在内核中所占据空间。...当然,一个糟糕程序完全可能造成进程退出信息滞留在内核中状况(父进程对子进程调用wait函数),这样情况下,进程成为僵尸(zombie)进程。当大量僵尸进程积累时,内存空间会被挤占。

    1.1K50

    【Linux】进程理解与学习(Ⅱ)

    ★简单总结 进程pcb可以被维护不同队列 阻塞:进程因为等待某种资源,而导致不推进状态(pcb会到某种资源等待队列下排队,等资源就绪时再被维护到运行队列,等待调度) cpu调度一般是一种线性调度...僵尸状态(Z) 返回代码 我们每一个进程结束时都会有一个退出码,就好像我们写一个main函数时,最后都会加上return 0,return 0就表示该进程正常返回(事实上就算我们不写return 0,系统默认...指令来查看该进程返回代码) vs下编译后返回代码 僵尸状态(Z) 僵尸状态是指一个进程结束时,它返回代码没有被父进程读取,那么该进程一直处于一种僵尸状态,等待进程读取,直到父进程读取返回结果后...暂停状态实际上也是阻塞(要等待你发出指令继续运行) 僵尸状态是指进程退出时,退出结果没有被父进程读取,进程就会保持僵尸状态,直到父进程读取返回结果,才彻底结束。...(假如没有被领养的话,进程退出结果就不会有人能拿到,那么子进程就成了僵尸,一直存在,造成内存泄漏。这是OS不允许,所以让1号进程成为进程进程,从而拿到进程退出结果)。

    59230

    Linux进程基础

    -bash   23774 16939 ps -o pid,ppid,cmd   我们可以看到,第二个进程bash是第一个进程sudo进程,而第三个进程ps是第二个进程进程。   ...这个函数会有两次返回,将进程PID返回给父进程,0返回进程。实际上,进程总可以查询自己PPID来知道自己进程是谁,这样,一对父进程进程就可以随时查询对方。   ...由此,就可以进程建立之后,让它执行与父进程不同功能。   ...在这个信息里,解释该进程为什么退出。父进程得知进程终结时,有责任对该进程使用wait系统调用。这个wait函数能从内核中取出进程退出信息,并清空该信息在内核中所占据空间。...当然,一个糟糕程序完全可能造成进程退出信息滞留在内核中状况(父进程对子进程调用wait函数),这样情况下,进程成为僵尸(zombie)进程

    2.5K30

    探索进程控制第一弹(进程终止、进程等待

    进程必须知道子进程pid,方便后续对子进程进行标识,进而进行管理;进程需要通过返回0,来看是否创建成功。 fork常规用法 一个父进程希望复制自己,使父子进程同时执行不同代码段。...释放内核数据结构时,PCB延迟释放。 进程终止情况 代码跑完,结果正确/不正确 main函数返回值是100,通过echo ?查询。系统中有一个变量叫做?,查看这个变量使用?...父进程为什么知道子进程退出码?父进程要知道子进程退出情况(失败了还是成功了,失败原因是什么),bash反馈给用户。...进程等待 概述 什么是进程等待? 任何进程退出情况下,一般必须要被父进程等待进程退出时候,如果父进程不管不顾,退出进程,处于僵尸状态(Z),存在内存泄漏。 为什么?...进程本身是软件,父进程本质是等待某种软件就绪。 进程等待本质是将进程PCB列入等待队列。那么如何理解父进程阻塞等待进程

    14310

    【linux】进程状态与优先级

    这时,进程状态大部分时间显示为 R,因为它在 CPU 上实际执行(即使它什么也没有做),并不需要等待任何系统资源。...init进程定期调用 wait() 收集其进程状态,因此可以自动清理僵尸进程。 发送信号:某些情况下,如果父进程未正确处理进程终止,可以考虑结束父进程(确保做到安全和适当)。...孤儿进程一般都是会被1号进程(OS本身)进行领养,以此确保进程被正常回收 直接在命令行中启动进程,他进程bashbash自动回收新进程Z 04.进程阻塞、挂起和运行 操作系统中,...这种状态通常发生在进程由于等待某些事件(如I/O操作完成)而阻塞,同时由于资源紧张等原因被换出主存。 即使阻塞条件得到满足,这些进程不能立即执行,需要先被恢复到内存中。...通过有效管理进程寄存器和内存状态,操作系统能够确保即使频繁切换环境中能保持程序正确执行和系统资源合理利用。对于系统设计者来说,优化进程切换过程是提高系统响应性和效率关键任务之一。

    18720

    【Linux】进程排队理解&&进程状态表述&&僵尸进程和孤儿进程理解

    一、进程排队理解  进程不是一直运行进程可能会在等待某种软硬件资源。即使进程加载到CPU中,不是一直运行。...当一个进程想要被CPU调度运行时,它对应代码和数据势必要加载到内存当中。...D磁盘休眠状态(Disk sleep)有时候叫不可中断睡眠状态/深度睡眠(uninterruptible sleep):在这个状态进程通常会等待IO结束,处于D状态进程系统资源吃紧时候不会被操作系统杀死...如果父进程不读取,那么这个僵尸状态进程一直存在,会引起内存泄漏,造成系统资源浪费。 为什么我们之前进程没有见过处于Z状态呢?...那是因为以前我们创建进程进程都是bashbash一瞬间自动读取进程退出状态,不需要我们手动读取。而我们自己创建进程需要我们自己读取它退出状态。

    18010

    《Linux操作系统编程》 第六章 Linux中进程监控: fork函数使用,以及父子进程关系,掌握exec系列函数

    fork(void); ▪ 返回值: - fork函数被正确调用后,可能会在进程中或父进程中分别返回 - 进程返回值为0(不合法PID,提示当前运行在进程中) - 进程返回值为进程ID...每次读文件时,连续地读出若干条记录,这样在下次读文件时就可以直接从内存缓冲区读取;同样,每次写文件时候仅仅是写入内存缓冲区,等满足了一定条件(如达到了一定数量或遇到特定字符等),再将缓冲区中内容一次性写入文件...6.5 Linux中进程等待 6.5.1 Linux中进程等待 (1) wait函数 ▪ 功能:获取任意进程状态改变信息(如果是终止状态则对子进程进行善后处理) ▪ 函数原型 - 头文件:sys...- options:可以为0,可以是以下常量 - WNOHANG:如果没有任何已经终止进程则马上返回, 函数不等待,此时返回值为0 - WUNTRACED:用于跟踪调试 ▪ waitpid特有的功能...waitpid函数pid参数怎样设置表示等待任一进程终止? 答:pid设置为 -1代表等待任意进程状态改变(同wait)。 4.Linux中什么情况下使用exec函数簇?

    17610

    【Linux】进程控制

    上面三种进程退出方法都是正常退出,但除了正常退出,进程异常退出,比如 Ctrl C 终止进程,或者程序中遇到除0,野指针,空指针解引用等问题: ---- 三、进程等待 1、为什么要进行进程等待...;进而就会造成内存泄漏; 所以,我们需要父进程对子进程进行 进程等待,获取进程退出信息,并让操作系统回收进程资源 (释放进程 PCB)。...S,之后进程运行5s退出,此时由于父进程还要休眠5s,所以没有对子进程进行进程等待,所以进程变成僵尸状态 D;5s过后,父进程使用 wait 系统调用对子进程进行进程等待,所以进程由僵尸状态变为彻底死亡状态...当父进程执行到 waitpid 函数时,如果子进程未退出,父进程直接读取进程状态并返回,然后接着执行后面的语句,不会等待进程退出。...轮询 轮询是指父进程非阻塞式状态前提下,以循环方式不断对子进程进行进程等待,直到进程退出。

    4.1K00

    初识Linux · 进程(3)

    \n"); } 代码本身是没有什么错误,但是打印出来时候,会发现打印出来并不是一个父进程一个进程打印,因为进程执行父进程后面的代码,所以执行这个死循环,从而导致进程创建进程,变成了指数级别的增长...这是正常吗? 当我们使用指令ps -xaj打开了任务管理器界面,我们就会发现2878进程bash(不一定2878就是bash可能会有变化,参照..../test,每个进程pid都是变化) 那么什么是bash呢? 当我们运行: 就会有bash提示你说,./是个目录,无法运行。 其实bash就是命令行解释器,我们刚才运行....根据前面的代码我们知道,进程继承父进程后面的所有代码,但是我们创建进程就是为了执行后面的代码吗?父进程可以执行啊,为什么要创建呢?...fork函数体内,已经创建了进程,所以返回两份id,因为父进程进入fork函数,那么有了两份id,至于为什么会有“两份”,埋个伏笔~ 所以得出结论,进程创建是用来干其他事情,不是用来干和父进程一样事情

    5310

    孤儿进程和僵尸进程概念及进程回收(wait函数及waitpid函数)

    一.孤儿进程 孤儿进程可以理解为一个进程进程英年早逝(父进程先于进程退出),就将这样一个进程称为孤儿进程linux操作系统上。...所以实际编程中,避免和防范僵尸进程产生显得尤为重要。 三.进程回收 (1)回收僵尸进程资源,一种比较暴力做法是将其父进程杀死,那么子进程资源将被回收。...返回值:如果为-1,回收失败,已经没有进程可以回收了。 如果 > 0,返回值为进程对应pid。 参数:进程退出状态,是一个传出参数。.../*wait函数是阻塞函数,等到进程结束回收资源*/ pid_t dpid = wait(NULL);//对子进程退出状态不关心 printf("...(3)pid == 0,等待其组ID等于调用进程组ID任一进程。 (4)pid < -1,等待其组ID等于pid绝对值任一进程

    1.7K20

    Shell小结

    同时,bash能完成简单算术运算,格式如下: $[expression] 例如:var1=2 var2=$[var1*10+1] 则:var2值为21。...8.命令分组 shell中有两种命令分组方法:“()”和“{}”,前者当shell执行()中命令时将再创建一个新进程,然后这个子进程去执行圆括弧中命令。...当用户执行某个命令时不想让命令运行时对状态集合(如位置参数、环境变量、当前工作目录等)改变影响到下面语句执行时,就应该把这些 命令放在圆括弧中,这样就能保证所有的改变只对子进程产生影响,而父进程不受任何干扰...#调用进程 ret=`exec ./wait.sh` #输出进程返回值 echo $?...4.wait 功能:是shell等待在后台启动所有进程结束。Wait返回值总是真。 #!/bin/bash eval ./wait.sh & wait 5.

    31030

    什么是PHP7中孤儿进程与僵尸进程

    基本概念 我们知道unix/linux中,正常情况下,进程是通过父进程创建进程创建新进程进程结束和父进程运行是一个异步过程,即父进程永远无法预测进程 到底什么时候结束。...每当出现一个孤儿进程时候,内核就把孤 儿进程进程设置为init,而init进程循环地wait()它已经退出进程。...任何一个进程(init除外)exit()之后,并非马上就消失掉,而是留下一个称为僵尸进程(Zombie)数据结构,等待进程处理。这是每个 进程结束时都要经过阶段。...pcntl_wait() 函数: 这个函数作用就是 “ 等待或者返回进程状态 ”,当父进程执行了该函数后,就会阻塞挂起等待进程状态一直等到进程已经由于某种原因退出或者终止。...但是即便这样修改,细心想的话还是会有个问题,那就是进程结束后,进程执行pcntl_waitpid()回收前,有五秒钟时间差,在这个时间差内,php child process将会是僵尸进程

    88230
    领券