Linux By Nina

殭屍進程 (Zombie Processes) 的成因與處理

殺不死的進程?

top 中看到狀態為 Z 的進程,使用 kill -9 是無效的,因為它們已經「死」了。

成因:子進程結束執行,但父進程沒有呼叫 wait() 來回收它的狀態資訊 (Exit Code),導致它在 Process Table 中殘留。

處理方式

  1. 找出父進程:ps -o ppid= -p <zombie_pid>
  2. 殺死父進程:如果父進程程式寫得爛無法回收,通常只能重啟父進程。父進程死後,殭屍進程會被 PID 1 (systemd) 接管並自動回收。

大量的 Zombie Process 不會佔用記憶體,但會佔用 PID 額度,可能導致無法建立新進程。