僵尸進程(Zombie process)是一種已經執行完畢但未被完全清除的進程
僵尸進程的出現通常發生在以下情況:
父進程在子進程執行完畢后沒有調用wait()或waitpid()函數來收集子進程的退出狀態信息。這樣,子進程的退出信息(包括進程ID、退出狀態等)會保留在系統進程表中,導致僵尸進程的產生。
子進程結束,但其父進程仍在運行。在這種情況下,子進程的退出信息會保留在系統進程表中,形成僵尸進程。
父進程在子進程執行過程中崩潰,導致子進程變成孤兒進程。孤兒進程會被init進程(PID為1)接管,init進程會周期性地調用wait()函數來回收孤兒進程的資源,因此孤兒進程不會變成僵尸進程。但如果父進程沒有正確回收資源,孤兒進程可能會變成僵尸進程。
為了避免僵尸進程的產生,父進程應該正確處理子進程的退出狀態信息,使用wait()或waitpid()函數來回收子進程的資源。