当任何子进程以代码结束时,如何在bash中等待几个子进程完成并返回退出代码!=0?

当任何子进程以代码结束时,如何在bash中等待几个子进程完成并返回退出代码!=0?

如何在bash脚本中等待从该脚本生成的几个子进程来完成并返回退出代码!=0,当任何子进程以代码!=0结尾时?

简单脚本:

#!/bin/bashfor i in `seq 0 9`; do
  doCalculations $i &donewait

上面的脚本将等待所有10个生成的子进程,但它总是给出退出状态0(请参见help wait)。如何修改这个脚本,以便当任何子进程以代码!=0结尾时,它将发现派生子进程的退出状态并返回退出代码1?

有什么比收集子进程的PID、按顺序等待它们和退出状态更好的解决方案吗?


翻阅古今
浏览 942回答 3
3回答

饮歌长啸

wait此外(可选)获取进程的PID等待,并使用$!得到在后台启动的最后一个命令的PID。修改循环,将每个产生的子进程的PID存储到数组中,然后再次循环等待每个PID。# run processes and store pids in arrayfor i in $n_procs; do     ./procs[${i}] &     pids[${i}]=$!done# wait for all pidsfor pid in ${pids[*]}; do     wait $piddone
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python