在Linux系統中,僵尸進程(Zombie Process)是一種特殊狀態的進程,指的是一個進程已經結束,但其父進程尚未調用wait()
或waitpid()
系統調用來回收其資源,導致子進程的進程描述符仍然保存在系統中。
fork()
創建子進程,如果子進程退出而父進程沒有調用wait()
或waitpid()
來獲取子進程的狀態信息,那么這個子進程就會變成一個僵尸進程。wait()
或waitpid()
來等待子進程結束,并回收其資源。SIGCHLD
信號處理函數,當子進程結束時,父進程會收到SIGCHLD
信號,并在信號處理函數中調用wait()
或waitpid()
來回收子進程。init
進程(進程號為1)接管并回收。wait()
或waitpid()
來回收資源。signal(SIGCHLD, SIG_IGN)
通知內核對子進程的結束不感興趣,這樣內核會在子進程結束后自動回收其資源。fork()
兩次的技巧,使子進程的父進程不是直接由用戶進程而是由init
進程接管,從而避免僵尸進程的產生。總之,雖然僵尸進程在技術上是“死亡”的,但它們仍然占用系統資源,可能導致系統資源耗盡或性能下降。因此,及時清理僵尸進程對于維護系統的穩定性和性能至關重要。