Justin Asked: 2017-09-17 21:00:37 +0800 CST2017-09-17 21:00:37 +0800 CST 2017-09-17 21:00:37 +0800 CST 执行命令然后在完成后并行化其他命令 772 我正在寻找一个要执行的内联命令/bin/first,然后在它完成后并行执行以下/bin/p1, /bin/p2, /bin/p3。 bash 2 个回答 Voted Best Answer HBruijn 2017-09-17T22:25:24+08:002017-09-17T22:25:24+08:00 当您通过在命令中附加 a 从 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 只有当您想要进行一些错误处理并检查您并行执行的程序的退出代码时,才需要该 for 循环。否则,wait没有任何参数的简单程序也将等待所有子进程终止。 Ole Tange 2017-09-18T08:58:37+08:002017-09-18T08:58:37+08:00 如果您需要确保输出不混合: /bin/first parallel ::: /bin/p1 /bin/p2 /bin/p3
当您通过在命令中附加 a 从 shell 脚本中启动和运行命令时&,它们将几乎完全并行运行,因为脚本不需要等到命令完成后再执行脚本中的下一行。
注意:当脚本完成时 p1 和 p2 可能仍在后台运行!
为了缓解您的脚本变得稍微复杂一些,因为您需要捕获 PID 并
wait
为它们:只有当您想要进行一些错误处理并检查您并行执行的程序的退出代码时,才需要该 for 循环。否则,
wait
没有任何参数的简单程序也将等待所有子进程终止。如果您需要确保输出不混合: