如何在bash脚本中等待子进程,如果其中一个返回退出代码1,那么我想停止所有子进程。
这就是我试图做的。
但也有一些问题:
-
如果第一个进程比所有其他进程都长,而另一个进程在后台失败。。。然后,脚本等待第一个进程完成,即使另一个进程已经失败。
-
无法检测到doSomething失败,因为我使用管道来打印所需的格式。
function doSomething()
{
echo [ $1 start ]
sleep $1
if [ $1 == 10 ]; then
failed
fi
echo [ sleep $1 ]: done
}
function failed(){
sleep 2
echo ------ process failed ------
exit 1
}
function process_log() {
local NAME=$1
while read Line; do
echo [Name ${NAME}]: ${Line}
done
}
pids=""
(doSomething 4 | process_log 4)&
pids+="$! "
(doSomething 17 | process_log 17)&
pids+="$! "
(doSomething 6 | process_log 6)&
pids+="$! "
(doSomething 10 | process_log 10)&
pids+="$! "
(doSomething 22 | process_log 22)&
pids+="$! "
(doSomething 5 | process_log 5)&
pids+="$! "
for pid in $pids; do
wait $pid || (pkill -P $$ ; break)
done
echo done program
有人有主意吗?