2015-03-25 61 views
0

獲得bash函數輸出而不等待其子進程結束的最佳方式是什麼?例如,以下內容不起作用,因爲在sleep 10&子進程結束之後,bash纔會返回。Bash函數正在等待其子進程完成

test-fn() { 
    sleep 10& 
    echo $! 
} 

pid=$(test-fn) 
echo "waiting" 
wait $pid 

移動測試Fn功能內部回聲是不是一種選擇:在我的現實生活中的情況下,子永遠不會結束,因此函數永遠不會返回。

+0

您可能有興趣使用start-stop-daemon。 – 2015-03-25 13:00:25

回答

1

問題在於進程替換正在等待與函數調用的stdout關聯的管道的所有寫入結束都關閉,但睡眠打開了一端。如此接近:

test_fn() { 
    sleep 10 >&- & # close stdout for sleep, or redirect if desired 
    echo $! 
} 

pid=$(test_fn) 
echo "waiting" 
wait 

請注意,頂級shell無法在$ pid上等待,因爲pid不是該shell的子級。