如何殺死僵尸進程呢?
一般僵尸進程很難直接kill掉,不過您可以kill僵尸爸爸。父進程死后,僵尸進程成為”孤兒進程”,過繼給1號進程init,init始終會負責清理僵尸進程.它產生的所有僵尸進程也跟著消失。
ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9
或
kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`
當然您可以自己編寫更好的shell腳本,歡迎與大家分享。
另外子進程死后,會發送SIGCHLD信號給父進程,父進程收到此信號后,執行waitpid()函數為子進程收尸。就是基于這樣的原理:就算父進 程沒有調用wait,內核也會向它發送SIGCHLD消息,而此時,盡管對它的默認處理是忽略,如果想響應這個消息,可以設置一個處理函數。