微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么后台进程在后台进程退出状态1时强制父进程退出?

我的Bash代码

#!/bin/sh set -ex function func () { sleep $1 echo $1 if [ $1 -eq 10 ]; then exit 1 fi } func 10 & pid_a=$! func 5 & pid_b=$! func 3 & pid_c=$! wait $pid_b if [ $? -eq 0 ];then echo "b.ksh SUCCESS"; else echo "b.ksh Failed"; fi wait $pid_c if [ $? -eq 0 ];then echo "c.ksh SUCCESS"; else echo "c.ksh Failed"; fi wait $pid_a if [ $? -eq 0 ];then echo "a.ksh SUCCESS"; else echo "a.ksh Failed"; fi

当它启动set -ex运行时:

sh-4.2$ ./ex.sh + pid_a=16341 + func 10 + pid_b=16342 + sleep 10 + func 5 + pid_c=16343 + sleep 5 + wait 16341 + func 3 + sleep 3 + echo 3 3 + '[' 3 -eq 10 ']' + echo 5 5 + '[' 5 -eq 10 ']' + echo 10 10 + '[' 10 -eq 10 ']' + exit 1

这里的父母也退出与状态1退出后台进程。你能解释为什么吗?

Bash脚本来检测我的USB插入,然后与目录同步

使用bash按第5列对csv文件进行sorting

如何在bash脚本中使用awk过滤两个date之间的数据

如何在BASH中对文件进行多次编辑,而不经常写入硬盘?

保存Git推送到输出文件

Bashredirect结合“双pipe”符号

(bash)用猫缩进多行文字到$ VAR?

Jupyter笔记本电脑没有正确启动在Windows Ubuntu的bash

如何让bash subshel​​linheritance父级的设置选项?

在OSX中永久设置PATH环境variables

你做不到

command if [ $? -eq 0 ]; then ...

一个set -e -using脚本中。 由于命令的非零退出状态甚至到达if之前,脚本将会结束。

wait等待进程的退出状态作为自己的退出状态(否则无论如何, $? check将是毫无意义的)。 试试这个:

if wait $pid_x; then echo "x.ksh SUCCESS" else echo "x.ksh Failed" fi

bash的手册中提到set -e :

-e如果一个简单的命令(见上面的SHELL GRAMMAR)以非零状态退出,立即退出。 如果失败的命令是命令列表的一部分,或者until关键字, if语句中的测试的一部分, &&或者||一部分,那么shell不会退出。 列表,或者如果命令的返回值是通过! 。 如果设置了ERR,则会在shell退出之前执行陷阱。

它没有提到任何有关'当后台进程以非零状态退出,shell不会终止' – 所以当后台进程失败时它终止。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐