Wait
殭屍程序無需“等待”即可收穫
我知道如果一個子程序沒有得到正確的收穫,它就會變成一個殭屍,你可以通過
ps
命令看到它。還有“等
$$ pid $$" 命令將等待子shell 在後台執行,直到它完成並收穫它。 我有一個這樣的腳本:
#!/bin/bash sleep 5 & tail -f /dev/null
我的問題是,我不使用
wait
aftersleep 5 &
並且父 shell 永遠不會因為 終止tail
,那麼為什麼sleep 5 &
不會成為殭屍?我看到它在完成後消失了ps
,不知道誰會收穫它?
這是讓 shell 模仿 OS API 的缺陷之一。它確實會造成混亂。在這種情況下,您將wait() (linux API) 與wait (bash 函式) 混淆了。
簡而言之,Bash 會為您處理收穫過程,您通常不需要考慮這一點。bash 命令對
wait
收割程序沒有影響。當您的子作業終止時,將通過SIGCHLD 信號通知 bash 。這將在發生這種情況時 bash 將停止它正在做的任何事情並收割停止的孩子。然後它會回到它正在做的任何事情。