2015-09-03 41 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了。