在Linux系統中,僵尸進程(Zombie processes)是一種特殊的進程狀態,指的是一個子進程已經執行完畢,但其條目并未從進程表中刪除。僵尸進程的產生通常有以下兩種原因:
父進程未回收子進程資源:當一個子進程終止時,它會向其父進程發送一個SIGCHLD信號,通知父進程其退出狀態。如果父進程沒有調用wait()
或waitpid()
來讀取子進程的退出狀態并回收資源,子進程就會成為僵尸進程。
父進程先于子進程結束:如果一個子進程還未終止,其父進程先于該子進程結束,那么該子進程會變為孤兒進程。孤兒進程會被系統的init
進程(進程號為1)接管,并由init
進程對它們完成狀態收集工作,從而避免僵尸進程的產生。然而,如果父進程沒有正確處理子進程的退出狀態,即使子進程變為孤兒進程,也可能產生僵尸進程。