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

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

问题 如何在 Bash 脚本中等待该脚本启动的多个子进程完成,并且当这其中任意一个子进程退出码结束时,让该脚本也返回一个退出码? 简单的脚本: #!.../bin/bash for i in `seq 0 9`; do calculations $i & done wait 上述脚本将会等待所有 10 个被创建的子进程结束,但它总会给出退出状态 0...我应该如何修改这个脚本,使其能检测到被创建子进程退出状态,并且当任何子进程代码结束时,让脚本返回退出码 1?.../usr/bin/env bash # 这是一个特殊的 sleep 函数,它将睡眠的秒数作为"错误代码" # 或"返回代码"返回,以便我们可以清楚地看到,实际上 # 我们在每个进程完成时确实获取了它的返回代码...[ $rc -ne 0 ] && break # 若子进程退出码结束,则跳出循环 done #echo $rc exit $rc 将代码保存为文件 wait_procs_demo.sh,再运行测试

7800

【Linux】开始掌握进程控制吧!

2 进程创建 2.1 fork函数初识 在linux中fork函数时非常重要的函数,它从存在进程中创建一个新进程。新进程进程,而原进程进程。...表示最近一个进程退出码),一般0表示正常运行,表示有问题。 父进程关心子进程的信息,想要知道子进程是否正常运行。...如,子进程运行完成,结果对还是不对,或者是否正常退出。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED,提取子进程退出码。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED,提取子进程退出码。(查看进程退出码) 对于第三个参数,就可以让父进程在等待的刚才中区做其他事情。

9010
您找到你想要的搜索结果了吗?
是的
没有找到

Linux:进程地址空间、进程控制(一.进程创建、进程终止、进程等待)

操作系统会根据这个退出码来判断程序是正常结束还是出现了某种错误。 我们自己写main函数时,总是写一个return 0 返回0表示程序成功执行 0表示出现了某种错误。...这个退出码是一个整数,用于表示进程执行的结果或状态。根据惯例,退出码0通常表示成功,而非表示出现了某种错误。...0通常表示成功,表示错误或异常情况。 信号(signal):用于在进程之间传递信息或通知进程发生了某种事件的机制。进程可以发送和接收信号,并对某些信号进行特定的处理。...如果父进程不关心子进程退出状态,可以将这个参数设为 NULL。 返回 返回大于时成功,返回终止子进程进程ID。 失败时,返回 -1,并设置全局变量 errno 以指示错误原因。...WIFEXITED(status):宏函数,如果子进程正常退出,返回;否则返回0。

7400

【linux命令讲解大全】181.登录用户信息查询命令:who 和 whoami 的使用详解

[file] [am i] 主要用途 当没有给出选项参数时,按以下字段顺序每个当前用户打印信息:登录用户名称,终端信息,登录时间,远程主机或X display。...-d, --dead: 打印 dead 状态的进程。 -H, --heading: 打印列标题行。 -l, --login: 打印系统登录进程。 --lookup: 尝试通过 DNS 规范主机名。...-p, --process: 打印由 init 生成的活动进程。 -q, --count: 列出所有登录的用户的名称和数量。 -r, --runlevel: 打印当前运行级别。...返回 返回0表示成功,返回0表示失败。...选项 --help: 显示帮助信息并退出。 --version: 显示版本信息并退出。 返回 返回0表示成功,返回0表示失败。

13910

Runtime源码解析(JDK1.8)

可以将变量作为一个状态码;根据惯例,的状态码表示非正常终止。 * 虚拟机的关闭序列包含两个阶段。...在第一个阶段中,会以某种未指定的顺序启动所有注册的关闭钩子(hook)(如果有的话),并且允许它们同时运行直至结束。 * 在第二个阶段中,如果启用退出终结,则运行所有未调用的终结方法。...一旦完成这个阶段,虚拟机就会暂停。 * 如果在虚拟机开始其关闭序列后才调用此方法,那么若正在运行关闭钩子,则将无限期地阻断此方法。...* 如果已经运行完关闭钩子,并且启用退出终结 (on-exitfinalization),那么此方法将利用给定的状态码(如果状态码是非)暂停虚拟机;否则将无限期地阻断虚拟机。...与 exit方法不同,此方法不会启动关闭钩子,并且如果启用退出终结,此方法也不会运行未调用的终结方法。

1.2K90

linux的一个进程调度周期内新加入进程的处理机制分析

,分为抢占式和抢占式。...长程调度(又叫高级调度)的主要任务则是将进入系统并处于后备状态的作业按某种算法选择一个或一批,其建立进程,并进入主机,装入内存;当该作业执行完毕时,负责回收系统资源。...也就是说,就绪队列是处于一种动态变化的状态:执行完成进程退出就绪队列,新的进程会加入到就绪队列。我们的短程调度算法和调度器要能妥善地应对就绪队列的这种动态变化的情况。        ...由参考博客2、3和4可知,通用Linux系统支持实时和实时两种进程,实时进程相对于普通进程具有绝对的优先级。...当进程创建完毕并被加载到就绪队列中时,其时间片应该是还未设置(默认为),因而在当前调度周期内,新加入就绪队列的进程不会影响当前调度周期的时间长度。

46330

解决subprocess.CalledProcessError: Command ‘‘

Digraph.gv‘]' returned non-zero在使用Python的subprocess模块执行外部命令时,有时候会遇到​​CalledProcessError​​的异常,这个异常表示执行的命令返回一个退出状态码...(returncode)。...如果在执行命令时返回了退出状态码,也会抛出异常。这里采用了try-except结构来捕获并处理异常,以便能够在发生错误时进行适当的错误处理。...这些函数可以从Python程序中启动另一个可执行文件、脚本或系统命令,并等待其完成。 下面介绍一下这几个常用的函数:run(): 这个函数用于运行一个进程,并等待其执行完成。...可以使用communicate()方法与子进程进行交互,向其发送输入数据并获取输出结果。可以使用wait()方法等待子进程完成

63960

Linux下wait, WIFEXITED, WEXITSTATUS的比较

); 如果成功,wait会返回被收集的子进程进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1,同时errno被置ECHILD。...如果参数status的不是NULL,wait就会把子进程退出时的状态取出并存入其中,这是一个整数值(int),指出了子进程是正常退出还是被非正常结束的(一个进程也可以被其他进程用信号结束,我们将在以后的文章中介绍...) 这个宏用来指出子进程是否正常退出的,如果是,它会返回一个。...2,WEXITSTATUS(status) 当WIFEXITED返回时,我们可以用这个宏来提取子进程的返回,如果子进程调用exit(5)退出,WEXITSTATUS(status)就会返回5;如果子进程调用...请注意,如果进程不是正常退出的,也就是说,WIFEXITED返回0,这个就毫无意义。 当然,处理进程退出状态的宏并不止这两个,但它们当中的绝大部分在平时的编程中很少用到。

1.2K40

进程控制

进程创建 fork函数初识 在linux中fork函数是非常重要的函数,它从存在进程中创建一个新进程。新进程进程,而原进程进程。...进程一旦变成僵尸状态,那就刀枪不入,“杀人不眨眼”的kill -9 也无能为力,因为谁也没有办法杀死一个已经死去的进程。 父进程派给子进程的任务完成的如何,我们需要知道。...如果子进程运行完成,结果对还是不对,或者是否正常退出。 父进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。...; 返回: 当正常返回的时候waitpid返回收集到的子进程进程ID; 如果设置了选项WNOHANG,而调用中waitpid发现没有已退出的子进程可收集,则返回0; 如果调用中出错,则返回-...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED,提取子进程退出码。

70920

Cypress web自动化34-cy.exec()执行系统命令

将与现有系统环境变量合并 failOnNonZeroExit true 如果命令以代码退出是否失败 timeout execTimeout 超时时间默认60秒 返回结果 cy.exec() 执行之后...,结果返回以下属性的对象: code code0 是成功 stdout 执行系统命令行输出内容 stderr 报错内容 使用示例 cy.exec() 运行任意系统命令提供了一个退出功能,...,那么就会失败 cy.exec('npm run build', { timeout: 20000 }) 选择在退出时不失败,并在代码和stderr上声明 cy.exec('man bear pig...cy.exec() 不支持不退出的命令,例如: 开始一个 rails server 运行监听任务 需要手动中断以停止的任何进程 命令必须在内退出,execTimeout 否则Cypress会杀死命令的进程并使当前测试失败...cy.exec() 只会运行您链接一次的断言,并且不会重试。

94220

轻度Linux服务器维护人员常用的Shell脚本命令

*ly 运行服务器问题错过的的计划 anacron 后台新窗口 screen 创建新shell后台执行,完成退出 sh -c "cd /home; ls" 系统监控 虚拟内存 cat /proc/meminfo...HOME/.bash_login - 4) 私有环境变量 $HOME/.profile $HOME/.bashrc 附录:expr命令操作符 操作符 描述 ARG1 | ARG2 如果没有参数是null或...,返回ARG1;否则返回ARG2 ARG1 & ARG2 如果没有参数是null或,返回ARG1;否则返回0 ARG1 < ARG2 如果ARG1小于ARG2,返回1;否则返回0 ARG1 <= ARG2...的数值长度 + TOKEN 将TOKEN解释成字符串,即使是个关键字 (EXPRESSION)) 返回EXPRESSION的 附录:Linux退出状态码 状态码 描述 0 命令成功结束 1 通用未知错误...,但不是终止进程 18 SIGTSTP 停止或者暂停进程,但不终止进程 19 SIGCONT 继续运行停止的进程

2.1K130

Linux系统-进程控制

Linux进程控制 、前言 一、进程创建 1、fork函数 2、fork返回 写时拷贝 3、fork用法 4、fork失败 二、进程终止 1、退出码 2、退出方法 1) 调用_exit函数 2)调用...、前言 前篇我们讲解学习了关于进程的概念知识,本章主要讲解关于进程的控制,深入学习进程 一、进程创建 1、fork函数 概念: 在linux中fork函数从存在进程中创建一个新进程(子进程)...查看的是最近函数的退出码,一般来说都是0 2、退出方法 进程退出场景: 代码运行完毕,结果正确,退出0 代码运行完毕,结果不正确,逻辑存在问题,退出0 代码异常终止,层序崩溃...kill掉,因为子进程已经死去,只能父进程等待回收 子进程的PCB保留着退出前任务执行的信息,而通过回收子进程我们可以知道子进程运行完成,结果对还是不对,或者是否正常退出 注:必须,依执行的程序和需求而定...): 若WIFEXITED,提取子进程退出码(查看进程退出码) 参数options: 设置0:表示默认的阻塞式等待子进程退出,即子进程退出就不返回,一直等待到子进程退出回收子进程

1.5K30

linux系统编程之进程(四):waitwaitpid函数与僵尸进程、fork 2 times

一、僵尸进程 当子进程退出的时候,内核会向父进程发送SIGCHLD信号,子进程退出是个异步事件(子进程可以在父进程运行的任何时刻终止) 子进程退出时,内核将子进程僵尸状态,这个进程称为僵尸进程,...返回的是子进程的PID,它通常是结束的子进程 状态信息允许父进程判定子进程退出状态,即从子进程的main函数返回的或子进程中exit语句的退出码。...如果status不是一个空指针,状态信息将被写入它指向的位置 通过以下的宏定义可以获得子进程退出状态 WIFEXITED(status) 如果子进程正常结束,返回一个 WEXITSTATUS...(status) 如果WIFEXITED,返回子进程退出码 WIFSIGNALED(status) 子进程因为捕获信号而终止,返回 WTERMSIG(status) 如果WIFSIGNALED...,返回信号代码 WIFSTOPPED(status) 如果子进程被暂停,返回一个 WSTOPSIG(status) 如果WIFSTOPPED,返回一个信号代码 四、waitpid函数

3.2K70

Linux进程控制

这里返回的0在系统中我们称为进程退出时的退出码,可以用来标定我们进程退出时的结果是否正确。 我们写代码是为了完成翁某项事请,那么我们怎么知道任务完成的如何呢?...功能:退出程序的函数 用法: exit(1); 异常退出 //只要括号内数字不为0都表示异常退出 exit(0); 正常退出 注意:括号内的参数都将返回给操作系统...如,子进程运行完成,结果对还是不对或者是否正常退出。...但都是父进程等待子进程退出。 我们讲一个小故事: 张三是一名大学生,读的专业计算机专业。...(比如打电话这个例子)阻塞等待可能需要多次检测,这是基于 阻塞等待的轮循方案。 如果子进程已经退出,调用wait/waitpid会立即返回,并释放资源,获得子进程退出信息。

8410

进程

:给父进程返回子进程的pid,给子进程返回0 在运行带有含义fork代码的时候,此时的父进程已经在运行队列中了,当开始执行fork创建子进程的时候,此时fork已经把子进程的相关属性都已经完成,此时子进程的返回的...确认是谁应该先获得某种资源,谁后获得资源 linux下的优先级 优先级=老的优先级+nice 当我们修改nice的时候,老的优先级都是从80开始进行修改的 nice可以修改的范围-20~19...id和pid相等的子进程 stat_loc:若子进程正常退出,则为真,0。...若发生错误,则可以提取子进程退出码 对于stat_loc后16位的前8位表示退出状态(退出码),0表示正常退出0表示不正常退出。 后7位表示终止信号,0表示正常运行结束,0就是有问题。...那么前8位的退出状态也就没有意义。 关于子进程有没有正常结束可以用WIFEXITED(stat_loc),若为正常终止的进程,该真。

81730

【Linux】进程控制

进程控制 一、进程创建 1. fork 函数创建子进程 在 Linux 中 fork 函数是非常重要的函数,它从存在进程中创建一个新进程。新进程进程,而原进程进程。...所以 main 函数的返回就是进程退出码! 0代表成功,0代表失败。...而退出码当中,0 代表成功,但是当退出 0 的时候,"我们"需要关心它是为什么失败的,这个"我们"指的是父进程;所以这时候就应该有不同的数字表明不同的原因,比如 1 代表某种失败原因,2 也代表另一种失败原因...父进程创建子进程是要让子进程完成相应的任务,子进程完成得如何得让父进程知道,所以需要通过进程等待的方式,获取子进程退出的信息;而获取子进程退出的信息我们上面学过退出码和是否有接收到信号,所以只需要获取这两个数字的信息即可...(查看进程是否是正常退出) WEXITSTATUS(status): 若 WIFEXITED ,提取子进程退出码。

12010

【Linux】进程控制

,pid:15839,ppid:15838,ret_id:10481 父进程等待成功后,其pid进程的pid ---- 终端2显示 说明经过等待僵尸进程没有了 waitpid pid_t waitpid...如果返回-1,则表示等待失败 status 是一个输出型参数,类似于一种返回 期望获取子进程的状态即 获取子进程退出信号和退出码 ---- kill-l 查看系统提供的信号 [yzq@VM-...我是父进程,等待子进程成功,pid:30316,ppid:30315,ret_id:10481,eixt status:3072 status的返回3072,不是exit中的12 ---- 进程退出收到的信号..., 打电话 可以看作系统调用waitpid,李四看作子进程 在第一次中,李四给张三打电话一直等待什么都不干,直到说张三说好了才返回即阻塞调用 在第二次中,李四给张三打电话,若张三说没好就挂掉电话,完成一次阻塞调用...,在等待这个过程干别的事情,回头再给李四打电话 即 阻塞等待 打电话就挂断本质:做了一次张三状态检测,用了多次检测,阻塞轮询 为了防止子进程一直不退出,而父进程一直在等待,使用阻塞轮询,使父进程不在一直等待

1.9K20
领券