执行命令然后在完成之后并行其他命令

我正在寻找一个内联命令来执行/bin/first ,然后当它完成后,并行地执行下面的/bin/p1/bin/p2/bin/p3

当通过追加命令在shell脚本中后台启动和运行命令时,它们将几乎完全并行运行,因为在执行脚本中的下一行之前,脚本不需要等待命令完成。

 #!/bin/bash /bin/first /bin/p1 & /bin/p2 & /bin/p3 

注意:当脚本完成时,p1和p2可能仍然在后台运行!

为了减轻你的脚本变得稍微复杂,因为你需要捕获PID并wait它们:

 #!/bin/bash /bin/first /bin/p1 & PID1=$! /bin/p2 & PID2=$! /bin/p3 & PID3=$! for PIDS in $PID1 $PID2 $PID3 ; do wait $PIDS done 

只有当你想做一些error handling并检查你并行执行的程序的退出代码时才需要for循环。 否则,不带任何参数的简单wait将等待所有的subprocess终止。

如果你需要确保输出不混合:

 /bin/first parallel ::: /bin/p1 /bin/p2 /bin/p3