Bash 等待脚本的所有子进程

Bash 等待脚本的所有子进程

我有一个脚本

for i in 1 2 3 4; do
    do_something $i &
done

当我调用它时,它会在所有do_something终止之前终止。我发现这个问题有许多不同的答案。

编辑:help wait告诉我

如果未给出 ID,则等待所有当前活动的子进程,并且返回状态为零。

难道只wait在最后加一个就够了吗?

答案1

是的,使用wait末尾不带参数的单个命令来等待所有后台作业终止就足够了。

请注意,在子 shell 中启动的后台作业需要在启动它们的同一个子 shell 中等待。您在显示的代码中没有这样的实例。

另请注意,您链接到的问题询问关于检查退出状态的后台作业。这要求wait为每个后台作业运行一次(以该作业的 PID 作为参数)。

答案2

在我看来,即使一次不带参数的等待就足够了,但这不是一个好的做法(依赖默认行为)。我会收集每次调用返回的 pid,并显式等待这些 pid。

相关内容