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

标签 bash process wait

如何在 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/

相关文章:

linux - Beeline 写入 STDERR 但不写入 STDOUT

linux - Bash 脚本无效空格符号

c++ - Win32API - 如何从进程句柄中获取进程的文件名?

Java等待()/加入(): Why does this not deadlock?

linux - bash 中的 fork 和 exec

node.js - 杀死 bash 脚本不会杀死子进程

Java ProcessBuilder.start() 比在终端中执行花费的时间要长得多

c - 使用 fork() 和管道的进程环

Java:WAITING所有子进程完成

c - child 收到 sigstop 后 wait() 不返回