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

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

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

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

    Linux系统-进程控制

    Linux进程控制 零、前言 一、进程创建 1、fork函数 2、fork返回值 写时拷贝 3、fork用法 4、fork失败 二、进程终止 1、退出码 2、退出方法 1) 调用_exit函数 2)调用...返回值: fork成功对子进程返回0,对父进程返回子进程的pid 写时拷贝 概念: fork成功之后父子代码共享,当父子不写入数据时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本...exec函数替换进程 注:在下文有着重讲解 4、fork失败 fork本质就是向系统要资源,当某个资源不够时则会发生fork失败 失败原因: 1.系统中有太多的进程 2.实际用户的进程数超过了限制...如果想执行不同程序,子进程可以调用一种exec函数以执行另一个程序 当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行 注:调用exec...(已经将代码和数据全部替换,执行新程序的执行逻辑) 如果调用出错则返回-1,所以exec函数只有出错的返回值而没有成功的返回值 命名理解: l(list) : 表示参数采用列表的形式传入如何使用程序或者命令

    1.5K30

    【Linux】进程控制

    值,怎么会有两个不同的值,让if和else if执行 返回的本质是写入,所以,谁先返回谁先写入id,因为进程具有独立性,会发生写时拷贝,地址一样,但是内容不一样。...查询: 到了这,有一个问题:那该如何设定main函数的返回值?...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行。...对于返回值问题: 这些函数如果调用成功则加载新的程序从启动代码开始执行,不再返回,和接下去的代码无关了。如果调用出错则返回-1,所以exec函数只有出错的返回值而没有成功的返回值。

    20030

    Linux进程控制

    0:表示程序异常退出,进程执行失败。非零又用1 2 3 4等等,数字表示不同的错误信息 bash会自动记录上一个程序的退出码 : echo $?...当函数运行成功时,errno值不会被修改,因此我们不能通过测试errno的值来判断是否有错误存在,而应该在被调用的函数提示有错误发生时,再检查errno的值。...如果子进程通过调用exit函数或main函数return返回而退出,则WIFEXITED返回非0值(真) ->正常退出;(进程是正常退出的,进程信号返回的是0,当进程信号为0时,WIFEXITED的返回值是非...(进程是异常退出的,进程信号返回的是非,当进程信号为非时,WIFEXITED的返回值是0) WEXITSTATUS(status):只有当WIFEXITED为真时(即进程是正常退出的,进程信号为0),接着才会使用...exec*函数只有失败返回值,是没有成功的返回值的。 替换完成之后,是不会产生新的进程的。 进程创建的时候:实现创建PCB,地址空间和页表,然后才是把程序加载到内存当中。

    9810

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

    将与现有系统环境变量合并 failOnNonZeroExit true 如果命令以非零代码退出是否失败 timeout execTimeout 超时时间默认60秒 返回结果 cy.exec() 执行之后...,结果返回以下属性的对象: code code为0 是成功 stdout 执行系统命令行输出内容 stderr 报错内容 使用示例 cy.exec() 为运行任意系统命令提供了一个退出功能,...cy.exec('npm run build', { timeout: 20000 }) 选择在非零退出时不失败,并在代码和stderr上声明 cy.exec('man bear pig', { failOnNonZeroExit...() 不支持不退出的命令,例如: 开始一个 rails server 运行监听任务 需要手动中断以停止的任何进程 命令必须在内退出,execTimeout 否则Cypress会杀死命令的进程并使当前测试失败...单击exec命令日志中的命令时,控制台将输出以下内容: ? cy.exec() 能执行系统命令,所以当然也是可以执行python的命令行指令的,如在cmd里面执行 python xx.py

    97120

    【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    新进程为子进程,而原进程为父进程 #include pid_t fork(void); 返回值:自进程中返回0,父进程返回子进程id,出错返回-1 进程调用fork,当控制转移到内核中的...注意,fork之后,谁先执行完全由调度器决定 1.2 fork函数返回值 子进程返回0, 父进程返回的是子进程的pid 1.2.1 写时拷贝 通常,父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入...查看进程退出码 从main返回 调用exit _exit 错误码有两种情况: 0:成功 非0:失败 查看错误码对应的错误描述: #include #include <unistd.h...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。

    16610

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

    父进程通过 进程等待 的方式,回收子进程资源,获取子进程退出信息 有时候进程也会 等待硬件资源 ,利用wait进程等待把自己挂起 3.如何进行等待(wait&waitpid) 【1】wait函数参数与返回值介绍...&演示 返回值pid_t:成功返回 被等待进程pid ,失败返回-1。...子进程消失 ,只剩下父进程 【2】waitpid函数参数与返回值介绍&演示 返回值: 当正常返回的时候,waitpid返回收集到的子进程的进程ID; 如果option设置了选项WNOHANG,...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...只有失败才有返回值 演示: 当程序替换成功时,打印语句begin和执行替换后的语句,不打印语句end 当程序替换失败时,打印语句begin和语句end //注:我们只要知道下面execl函数是 起到进程替换的作用就行

    10810

    Linux进程控制

    2.如何理解fork函数返回后,子进程中返回0,父进程返回子进程id? 3.如何理解同一个id值,为什么会保存两个不同的值,让if  else  if同时执行?...所以,fork函数就有两个返回值,一个是返回子进程的,一个是返回父进程的。 第三个问题:3.如何理解同一个id值,为什么会保存两个不同的值,让if  else  if同时执行? 返回的本质就是写入。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...阻塞与非阻塞 阻塞:当父进程通过系统调用wait/waitpid去获取子进程的资源时,但子进程还没有退出,等待的这个状态,就叫做阻塞。...如果调用出错则返回-1 所以exec函数只有出错的返回值而没有成功的返回值。因为成功的返回值没有必要,都已经替换了进程了,即使返回了,这个值也用不了。

    2.4K30

    浅析Kubernetes Pod重启策略和健康检查

    探针处理程序 为了使健康检查能够对Pod的运行状况进行诊断,kubelet会调用容器中为探针实现的处理程序,这些处理程序分为三大类: Exec:在容器内执行命令。...处理程序的返回状态也分为三种: Success:容器通过诊断。 Failed:容器无法通过诊断。 Unknown:诊断失败,状态不确定,将不采取任何措施。...聊完了探针程序的种类和返回值接下来我们来了解一下这两种探针的使用案例。 使用案例 活性和就绪探针都在Pod的YAML文件中配置。每种类型都有不同的用例。...kubelet在容器中执行命令"cat/tmp/healthy",如果成功,则返回0,指示它是健康的。如果返回非零值,则kubelet将kill掉该容器并重新启动它。...readinessProbe: httpGet: path: / port: 8080 timeoutSeconds: 2 当探测响应时间超过两秒钟时

    4.9K20

    【Linux】探索进程控制奥秘,解锁高效实战技巧

    函数也被称为子程序,与进程退出时返回退出码类似,函数执行完毕也会返回一个值,这个值通常用于表示函数的执行结果或状态。...返回值:调用成功,返回已经结束进程的PID,同时获取到了子进程的退出状态码;调用失败,返回-1,并设置错误码以指示错误的原因。...返回值: 调用成功,返回收集到的子进程的PID,同时获取到了子进程的退出状态码;调用失败,返回-1,并设置错误码以指示错误的原因;如果为非阻塞等待,waitpid调用成功且没有收集到已结束的子进程,则返回...加载新程序:当进程决定进行程序替换时(调用exec函数),它会请求OS将全新程序(代码和数据)从磁盘中加载到内存。...如果调用出错则返回-1 所以exec函数只有出错的返回值而没有成功的返回值。 命名理解 这些函数原型看起来很容易混,但只要掌握了规律就很好记。

    5110

    详谈 Linux进程控制(看这一篇就够了)

    来获取, 如下图所示: 对于返回值,0表示成功, 非0表示错误,为什么会失败呢?系统提供了不同的错误码信息记录了错误的原因, 也可以自己约定错误码。 那么什么是错误码呢?...进程等待 首先我们可以查看一下fork的返回值, 如果fork失败, 则错误码会被设置。...阻塞与非阻塞 waitpid的第三个参数就是关于阻塞等待与非阻塞等待 首先waitpid的返回值, 如果>0表示,返回目标进程pid, 如果 == 0, 等待成功,但是子进程没有退出, 失败....当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。 ✨2....如果调用出错则返回-1 所以exec函数只有出错的返回值而没有成功的返回值。

    12910

    【Linux修炼】11.进程的创建、终止、等待、程序替换

    进程的创建 1.1 fork函数初识 1.2 fork的返回值问题 1.3 写时拷贝 1.4 创建多个进程 2. 进程终止 2.1 进程退出码 2.2 进程如何退出 3....#include pid_t fork(void); //返回值:子进程中返回0,父进程返回子进程id,出错返回-1 那么在调用fork函数之前只有一个进程,当进程调用fork时,...1.2 fork的返回值问题 对于这个问题,从三个层次去理解。 1. 如何理解fork函数有两个返回值问题?...execl函数的返回值问题 我们知道,只要是一个函数调用就有可能失败,就是没有替换成功,就是没有替换,而对于这exec系列的函数,失败了返回-1,程序不被替换,因此execl下面的代码也会继续执行。...如果调用出错则返回-1 所以exec函数只有出错的返回值而没有成功的返回值。

    6.2K00

    CKAD考试实操指南(六)---剖析系统:深入可观察性实践

    网络问题: 如果在探针尝试建立连接时发生网络故障,如丢包或延迟过高,探针可能会失败。 Exec 探针: 在容器内运行指定的命令,如果命令成功执行并返回零退出代码,容器被认为是健康的。...不健康判定: 命令执行失败: 如果在容器内部执行的命令返回非零的退出代码,探针会被认为是不健康的。通常情况下,命令成功执行应该返回零的退出代码,非零的退出代码表示命令执行出现问题。...- **Exec 探针:** 在容器内运行指定的命令,如果命令成功执行并返回零退出代码,容器被认为是健康的。...- 不健康判定: - **命令执行失败:** 如果在容器内部执行的命令返回非零的退出代码,探针会被认为是不健康的。...通常情况下,命令成功执行应该返回零的退出代码,非零的退出代码表示命令执行出现问题。 - **命令超时:** 如果执行的命令在预定的超时时间内没有完成,探针会被认为是不健康的。

    43900

    1 认识正则表达式

    exec()方法的参数是待匹配的字符串str,匹配成功时,该方法的返回值是一个数组,否则返回null。...match()方法 String对象中的match()方法除了可在字符串内检索指定的值外,还可以在目标字符串中根据正则匹配出所有符合要求的内容,匹配成功后将其保存到数组中,匹配失败则返回false。...返回值是替换后的新字符串,因此,并不会修改原字符串的内容。 // 非捕获 var reg = /(?:J)(?...search()方法匹配失败后的返回值为-1。 split()方法:用于根据指定的分隔符将一个字符串分割成字符串数组,其分割后的字符串数组中不包括分隔符。...当字符串为空时,split()方法返回的是一个包含一个空字符串的数组“[“”]”,如果字符串和分隔符都是空字符串,则返回一个空数组“[]”。

    8710

    Redis事物的设计与实现

    但其实并不是所有的命令都会被放进事务队列, 其中的例外就是 EXEC 、 DISCARD 、 MULTI 和 WATCH 这四个命令 —— 当这四个命令从客户端发送到服务器时, 它们会像客户端处于非事务状态一样...在非事务状态下,执行命令所得的结果会立即被返回给客户端; 而事务则是将所有命令的结果集合到回复队列,再作为 EXEC 命令的结果返回给客户端。...带 WATCH 的事务 WATCH 命令用于在事务开始之前监视任意数量的键:当调用 EXEC 命令执行事务时, 如果任意一个被监视的键已经被其他客户端修改了, 那么整个事务不再执行, 直接返回失败。...john T5 EXEC 在时间 T4 ,客户端 B 修改了 name 键的值, 当客户端 A 在 T5 执行 EXEC 时,Redis 会发现 name 这个被监视的键已经被修改, 因此客户端 A...当客户端执行 EXEC 命令时, Redis 会拒绝执行状态为 REDIS_DIRTY_EXEC 的事务, 并返回失败信息。

    58220

    linux: Shell脚本设计函数的成功和异常返回值

    本文将探讨如何在 Shell 脚本中设计函数的成功和异常返回值,以便于更有效地处理错误和管理脚本的执行流程。 了解 Shell 函数的基础 Shell 函数是一组执行特定任务的命令集合。...当函数执行成功且没有错误时,应返回 0。这遵循了 UNIX 和 Linux 中的常规惯例,即“无消息即好消息”。...else echo "文件不存在" return 1 fi } 设计异常的返回值 对于错误或异常情况,应使用非零值作为返回值。...使用描述性错误代码:使用不同的非零值来区分不同类型的错误。 在文档中记录返回代码:在脚本或函数的文档中说明每个返回代码的含义。 一致性:在整个脚本中保持返回值的一致性。...结论 在 Shell 脚本中正确设计和使用函数的返回值是确保脚本健壮性和可靠性的关键。通过遵循上述指导原则,您可以更有效地处理错误,并使您的脚本更容易理解和维护。

    50510
    领券