我有一个脚本
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。