我正在寻找一个内联命令来执行/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