2015-09-03 13 views
0

我想使用(在Korn Shell脚本)的代码是这样的:(Linux)的如何使一个子进程的等待手表子过程

load_x() 
{ 
consumer_load & 
producer_spool 
} 

while read line 
do 
    load_x & 
done < list_of_loads 
wait 

概括地说,我想读来自平面文件的表格列表,然后并行触发它们的加载。我也在后台触发consumer_load函数,以便producer_spool函数可以通过命名管道向它提供数据。 我面临的问题是wait语句似乎不适用于在后台触发的内部子进程(consumer_load &)。即它等待load_x函数完成,但不等待consumer_load完成并移至下一个语句。 在这种情况下,如果producer_spool函数在consumer_load之前完成,则即使consumer_load仍在运行,脚本也会结束。 有没有办法让脚本等待所有的子进程?将等待内load_x(作为最后一行)工作?

+2

在Unix上,进程只能等待自己的孩子,没有办法对付孙辈。 – Barmar

+0

是的,'load_x'里面的'wait'应该可以工作。 – Barmar

+0

那么一个子进程可以等待孙子进程吗?如果我在load_x函数内等待,该怎么办? – jawsnnn

回答

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 
0

我想你应该:

load_x() 
{ 
    (
     consumer_load & 
     producer_spool 
     wait 
    ) 
} 

否则load_x假定它总是在后台运行,并且如果它不是,它的“等待”将等待其他背景的PID了。