Tob*_*biM 4 parallel-processing bash exit
在 Bash 中,我想并行多次调用一个命令,同时捕获所有进程的退出代码。
我知道如何启动并等待它们,但是等待只会给我最后一个进程退出的退出代码。我还需要生命周期较短的进程的退出代码。
不幸的是我没有 bash 4.3,所以wait -n不是一个选项,gnu 并行也不是#3004811中建议的
#16032001几乎问了同样的问题,但也没有提供解决方案。
我目前能想到的唯一方法是编写一个帮助程序脚本,将退出代码存储在文件中,但这听起来不像是一个干净的解决方案。
答案是如何在 bash 中等待多个子进程完成并在任何子进程以代码 !=0 结束时返回退出代码 !=0?
我不知道虽然孩子立即被 bash 收获,但内置等待仍然可以访问 pid 的退出代码。
#!/bin/bash
FAIL=0
PIDS=""
echo "starting"
sleep 5 &
PIDS="$PIDS $!"
sleep 3 &
PIDS="$PIDS $!"
/bin/false &
PIDS="$PIDS $!"
sleep 3 &
PIDS="$PIDS $!"
for job in $PIDS
do
wait $job || let "FAIL+=1"
echo $job $FAIL
done
echo $FAIL
if [ "$FAIL" == "0" ];
then
echo "YAY!"
else
echo "FAIL! ($FAIL)"
fi
Run Code Online (Sandbox Code Playgroud)
正确给出
starting
14772 0
14773 0
14774 1
14775 1
1
FAIL! (1)
Run Code Online (Sandbox Code Playgroud)
只有第三个进程 (/bin/false) 失败,如第三行中从 0 到 1 的切换所示。
| 归档时间: |
|
| 查看次数: |
5591 次 |
| 最近记录: |