1
我有一個shell腳本,它在後臺生成一個子進程並等待(通過等待命令)。它也捕獲SIGTERM並將其傳遞給孩子。但是,無論何時向父進程發送一個SIGTERM,即使該子進程仍在運行(子進程爲SIGTERM),它也會從「等待」中退出。是否有可能從一個shell腳本內真正地等待一個孩子直到孩子死亡?即使子進程仍在運行,Bash等待子進程仍然可以返回
我有一個shell腳本,它在後臺生成一個子進程並等待(通過等待命令)。它也捕獲SIGTERM並將其傳遞給孩子。但是,無論何時向父進程發送一個SIGTERM,即使該子進程仍在運行(子進程爲SIGTERM),它也會從「等待」中退出。是否有可能從一個shell腳本內真正地等待一個孩子直到孩子死亡?即使子進程仍在運行,Bash等待子進程仍然可以返回
這是常見成語所依賴的顯式行爲。遵守以下區別:
# 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。