我正在寻找一个要执行的单内联命令/bin/first
,然后当它完成之后并行执行以下/bin/p1
命令。/bin/p2
/bin/p3
答案1
当您通过在命令后附加一个来从 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
没有任何参数的简单循环也会等待所有子进程终止。
答案2
如果需要确保输出不混合:
/bin/first
parallel ::: /bin/p1 /bin/p2 /bin/p3