小编典典

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

all

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

简单的脚本:

#!/bin/bash
for i in `seq 0 9`; do
  doCalculations $i &
done
wait

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

有没有比收集子进程的 PID、按顺序等待它们并总结退出状态更好的解决方案?


阅读 191

收藏
2022-03-03

共1个答案

小编典典

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
2022-03-03