如何知道后台作业是否在shell脚本中完成?

如何知道后台作业是否在shell脚本中完成?

n=0 while [ $n le 10 ] do dosomething & n= `expr $n + 1` done 

我们怎么能知道所有的dosomething进程完成或没有?

完成后,我想打印echo "done"

你可以使用wait ,就像这样:

 n=0 while [ $n le 10 ] do dosomething & done wait # all dosomething are finished here 

如果您需要等待其中的几个,您可以使用wait $pid来等待一个特定的pid,执行$! ,这意味着给我最后一个命令的PID。

编辑:

我看到有两个问题在这个问题上,看看他们:

  • 如何在bash中等待几个子进程完成并返回退出代码!= 0当任何子进程以代码!= 0结束?
  • 在退出脚本之前等待后台进程完成

其中第二个似乎完全是你的问题的副本,我正在投票结束这个。

您可以使用以下内容:

 for i in {1..10}; do command & done; wait 

使用for循环和一个数字范围稍微缩短。