如何并行运行两个命令并在其中一个命令以退出代码 0 终止时终止它们?

如何并行运行两个命令并在其中一个命令以退出代码 0 终止时终止它们?

我有 2 个要同时运行的命令。我希望脚本在其中一个以代码 0 或 1 退出时终止。我怎样才能在 Linux(Ubuntu) 中实现这一点

cmd1 &
cmd2 &
wait

答案1

像这样的东西:

(cmd1; [ "$?" -lt 2 ] && kill "$$") &
(cmd2; [ "$?" -lt 2 ] && kill "$$") &
wait

答案2

对于bash4.4 及更高版本:

cmd1 & p1=$!
cmd2 & p2=$!

wait -n
[ "$?" -gt 1 ] || kill "$p1" "$p2"
wait

wait -n等待第一个后台作业完成并报告其退出状态$?

假设您想在第一个作业以 0 或 1 退出时终止另一个作业。更改kill命令到exit如果您想退出脚本并让另一个命令在没有父子关系的情况下运行。

相关内容