(Linux)如何使等待子进程的子进程

时间:2015-09-03 18:24:26

标签: linux shell wait

我正在尝试使用的代码(korn中的shell脚本)是这样的:

load_x ()
{
consumer_load &
producer_spool
}

while read line
do
  load_x &
done < list_of_loads
wait

简而言之,我试图从平面文件中读取一个表列表,然后并行触发它们的负载。我还在后台触发consumer_load函数,以便producer_spool函数可以通过命名管道向其提供数据。 我面临的问题是,wait语句似乎不适用于在后台触发的内部子进程(consumer_load&amp;)。即它等待load_x函数完成,但不等待consumer_load完成并移动到下一个语句。 在这种情况下,如果producer_spool函数在consumer_load之前完成,则即使consumer_load仍在运行,脚本也将结束。 有没有办法让脚本等待所有子进程?将wait_x(作为最后一行)放在内部会有效吗?

2 个答案:

答案 0 :(得分:0)

我认为Barmar发布了我的问题的答案。我仍然在验证它,但根据我认为应该有效。

load_x ()
{
consumer_load &
producer_spool
wait # Waits for consumer_load process to finish before exiting load_x
}

while read line
do
  load_x &
done < list_of_loads
wait

答案 1 :(得分:0)

我认为你应该:

load_x ()
{
    (
         consumer_load &
         producer_spool
         wait 
    )
}

否则load_x假设它总是在后台运行,如果不是,它的“等待”也会等待其他背景。