如何在 bash 脚本中等待从该脚本派生的多个子进程完成,然后在任何子进程以代码 !=0< 结束时返回退出代码
?!=0
/
简单的脚本:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
上面的脚本将等待所有 10 个衍生的子进程,但它总是给出退出状态 0
(参见 help wait
)。我如何修改此脚本,以便它发现衍生子进程的退出状态并在任何子进程以代码 !=0
结束时返回退出代码 1
?
有没有比收集子进程的 PID、按顺序等待它们并总结退出状态更好的解决方案?
最佳答案
wait
还(可选)获取要等待的进程的 PID
,并使用 $!
获取在中启动的最后一个命令的 PID
背景。
修改循环以将每个生成的子进程的 PID
存储到一个数组中,然后再次循环等待每个 PID
。
# run processes and store pids in array
for i in $n_procs; do
./procs[${i}] &
pids[${i}]=$!
done
# wait for all pids
for pid in ${pids[*]}; do
wait $pid
done
关于bash - 如何在 bash 中等待多个子进程完成,并在任何子进程以代码 !=0 结束时返回退出代码 !=0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/356100/