如何在bash中等待多个子进程完成,当任意子进程以code!=0结束时返回退出代码!=0? [英] How to wait in bash for several subprocesses to finish, and return exit code !=0 when any subprocess ends with code !=0?
本文介绍了如何在bash中等待多个子进程完成,当任意子进程以code!=0结束时返回退出代码!=0?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何在bash脚本中等待该脚本派生的多个子进程完成,然后在任意子进程以代码!=0
结束时返回退出代码!=0
?
简单脚本:
#!/bin/bash
for i in `seq 0 9`; do
doCalculations $i &
done
wait
上面的脚本将等待所有10个派生的子进程,但它始终会给出退出状态0
(请参见help wait
)。如何修改此脚本以使其能够发现派生的子进程的退出状态,并在任意子进程以代码!=0
结束时返回退出代码1
?
有没有比收集子进程的PID、按顺序等待并对退出状态求和更好的解决方案?
推荐答案
<[2-6]>还(可选)获取要等待的进程的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中等待多个子进程完成,当任意子进程以code!=0结束时返回退出代码!=0?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文