gpt4 book ai didi

linux - 为什么当后台进程以状态 1 退出时,后台进程会强制父进程退出?

转载 作者:太空狗 更新时间:2023-10-29 11:45:06 24 4
gpt4 key购买 nike

我的 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 退出。你能解释一下为什么吗?

最佳答案

你不能这样做

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

set -e 使用脚本中。由于命令的非零退出状态甚至在到达 if 之前脚本将结束。

wait 将等待进程的退出状态报告为它自己的退出状态(否则 $? 检查将毫无意义)。试试这个:

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

关于linux - 为什么当后台进程以状态 1 退出时,后台进程会强制父进程退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20464383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com