2017-01-11 72 views
1

我有一個shell腳本,它在後臺生成一個子進程並等待(通過等待命令)。它也捕獲SIGTERM並將其傳遞給孩子。但是,無論何時向父進程發送一個SIGTERM,即使該子進程仍在運行(子進程爲SIGTERM),它也會從「等待」中退出。是否有可能從一個shell腳本內真正地等待一個孩子直到孩子死亡?即使子進程仍在運行,Bash等待子進程仍然可以返回

回答

1

這是常見成語所依賴的顯式行爲。遵守以下區別:

# this waits 10 seconds, and doesn't handle signal handlers until later 
sleep 10 

# this returns immediately when a signal is received 
sleep 10 & wait $! 

你完全能夠檢查剩餘的後臺任務是否存在,並再次等待:

sleep 10 & pid=$! 
while kill -0 "$pid"; do wait "$pid"; done 

對於信號處理,包括這裏所描述的行爲進行了充分討論,請參閱SignalTrap

相關問題