bash能否生成多个进程并报告成功运行了多少进程?

bash能否生成多个进程并报告成功运行了多少进程?,bash,Bash,在Bash中是否可以生成多个进程,并且在最后一个进程完成后,报告有多少进程正确终止/没有核心转储 或者在Python中这样做会更好吗 (理想情况下,我想报告哪个命令失败了,如果有的话)希望您能够利用gnupallel及其故障处理。一般示例: parallel ::: ./processA ./processB ./processC 具体例子。。。在这里,我运行3个简单作业,每个作业都用单引号括起来,并将其设置为在所有作业完成或失败后停止: parallel --halt soon,fail=1

在Bash中是否可以生成多个进程,并且在最后一个进程完成后,报告有多少进程正确终止/没有核心转储

或者在Python中这样做会更好吗


(理想情况下,我想报告哪个命令失败了,如果有的话)

希望您能够利用gnupallel及其故障处理。一般示例:

parallel ::: ./processA ./processB ./processC
具体例子。。。在这里,我运行3个简单作业,每个作业都用单引号括起来,并将其设置为在所有作业完成或失败后停止:

parallel --halt soon,fail=100% ::: 'echo 0 && exit 0' 'echo 1 && exit 1' 'echo 2 && exit 2'
输出

0
1
parallel: This job failed:
echo 1 && exit 1
2
parallel: This job failed:
echo 2 && exit 2
默认情况下,它将并行运行
N
作业,其中
N
是您的CPU拥有的内核数,如果您只想按顺序运行作业,请使用:

parallel -j 1 ...

显然,您可以通过grep-c“This job failed”来计算失败的次数。

假设您有一个包含以下命令的文件:

cmd1
cmd2
cmd3
然后,只要您最多有100次失败,这将为您提供失败作业的数量:

cat file | parallel
a=$?; echo $((`wc -l <file`-$a))
这很容易

首先在后台运行作业。记住pids

然后对每个子级执行
wait$pid
并查看
wait
退出状态,该状态等于传递给它的子级pid的退出状态

如果退出状态为零,则表示子级成功终止

#!/bin/bash

exit 0 &
childs+=($!)
exit 1 &
childs+=($!)
exit 2 &
childs+=($!)
echo 1 &
childs+=($!)

successes=0

for i in "${childs[@]}"; do
        wait $i
        if (($? == 0)); then
                ((successes++))
        fi
done

# will print that 2 processes (exit 0 and echo 1) terminated successfully
printf "$successes processes terminated correctly and didn't core dump\n"
相关:,尤其是
#!/bin/bash

exit 0 &
childs+=($!)
exit 1 &
childs+=($!)
exit 2 &
childs+=($!)
echo 1 &
childs+=($!)

successes=0

for i in "${childs[@]}"; do
        wait $i
        if (($? == 0)); then
                ((successes++))
        fi
done

# will print that 2 processes (exit 0 and echo 1) terminated successfully
printf "$successes processes terminated correctly and didn't core dump\n"