BASH - 在"等待"之后,为什么后台进程的"作业-p"有时会显示"完成"?



简短版本:我的bash脚本有一个函数。

然后,此函数在后台启动另一个函数的多个实例(最多 10 个)(带有 & )。

我计算了有多少人仍然活跃在 do 循环中的jobs -p | wc -w中。当我完成循环时,我break.

然后,我使用 wait 来确保所有这些进程在继续之前终止。

但是,当我检查计数(带jobs -p)时,我有时会发现:

[10]   9311 Done                    my_background_function_name $param

如何让wait仅在所有启动的子进程完全终止且作业列表为空时才继续?

为什么作业有时显示为"已完成",有时不显示?

显然,我对jobs如何运作的了解是不足的。 :)

谢谢。

在 bash 脚本中,似乎当所有作业都结束时,作业 -p 仍然返回最后一个完成的作业。这在 bash 中对我有用:

while true; do
  sleep 5
  jobs_running=($(jobs -l | grep Running | awk '{print $2}'))
  if [ ${#jobs_running[@]} -eq 0 ]; then
    break
  fi
  echo "Jobs running: ${jobs_running[@]}"
done

使用"等待"命令,您无法判断每个进程何时结束。使用以前的算法,您可以。

最新更新