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

查看:24
本文介绍了如何在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆