僵屍進程是已終止但父進程未回收其退出狀態的進程,長期累積會佔用 PID 資源。本文提供標準查找、清理流程,以及無法直接殺掉時的父進程處理策略。
# ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
參數說明:
-A:列出所有進程-o stat,ppid,pid,cmd:自訂輸出欄位(狀態、父 PID、PID、命令)grep -e '^[Zz]':篩選狀態為 Z/z(僵屍)的進程輸出範例:
Z 12334 12339 /path/cmd
12339:僵屍進程 PID(子進程)12334:父進程 PPID# kill -HUP 12339
通知父進程重新讀取配置/回收子進程狀態。執行後再次查找確認是否清除。
# kill -HUP 12334
父進程終止後,僵屍子進程會被 init(PID 1)收養並自動回收。謹慎操作,確認父進程非關鍵系統服務。
# top
在 top 介面中,zombie 欄位顯示僵屍進程數量,按 Shift+P 依 CPU 排序,Shift+M 依記憶體排序,c 顯示完整命令路徑。
wait()/waitpid() 回收子進程退出碼SIGCHLD 信號或呼叫 waitpid()掌握 ps + grep 查找與 kill -HUP 清理組合拳,配合 top 監控,即可高效處理僵屍進程問題。