Kill
如何殺死父程序為 init 的 <defunct> 程序?
傳輸間歇性地掛在我的 NAS 上。如果我發送 SIGTERM,它不會從程序列表中消失,並且
<defunct>
旁邊會出現一個標籤。如果我發送 SIGKILL,它仍然不會消失,並且我無法終止父級,因為父級是init
. 我可以擺脫程序並重新啟動傳輸的唯一方法是重新啟動。我意識到我能做的最好的事情就是嘗試修復傳輸(我已經嘗試過),但我是編譯新手,我想確保我的種子在我開始弄亂它之前完成。
你不能殺死一個
<defunct>
程序(也稱為殭屍程序),因為它已經死了。系統為父程序保留殭屍程序以收集退出狀態。如果父程序沒有收集退出狀態,那麼殭屍程序將永遠存在。擺脫這些殭屍程序的唯一方法是殺死父程序。如果父級是 init,那麼您只能重新啟動。殭屍程序幾乎不佔用資源,因此讓它們逗留沒有性能成本。儘管周圍有殭屍程序通常意味著您的某些程序中存在錯誤。Init 通常應該收集所有的孩子。如果 init 有殭屍孩子,那麼 init 中就有一個錯誤(或者其他一些錯誤,但它確實是一個錯誤)。