在 CentOS(以及大多数 Linux 发行版)中,僵尸进程(Zombie / Z 状态进程) 可以通过以下方式查找和处理。
僵尸进程是已经结束运行,但父进程还没有回收它(wait)的进程,状态为 Z。
它不占 CPU、不占内存,但会占用 PID,过多时可能导致无法创建新进程。
ps 命令(最常用)ps -ef | grep defunct
或
ps aux | grep ' Z'
更直观的方式:
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/'
示例输出:
PID PPID STAT CMD
12345 1000 Z [test] <defunct>
toptop
在顶部看:
Tasks: 210 total, 1 zombie
如果有 zombie > 0,说明存在僵尸进程。
按 f → 选择 STAT 或 S 显示状态,找 Z 状态进程。
/proc 查找(进阶)for p in /proc/[0-9]*; do
if [ "$(cat $p/stat 2>/dev/null | awk '{print $3}')" = "Z" ]; then
echo "$p"
fi
done
ps -o pid,ppid,stat,cmd -p <僵尸PID>
或者:
cat /proc/<僵尸PID>/status
看 PPid 字段。
kill -9 <僵尸PID> # 无效
kill -9 <父进程PPID>
⚠️ 注意:确认父进程可以安全重启(如 Java、Python 服务)
systemctl restart <服务名>
wait()SIGCHLDwaitpid()ps -eo stat | grep Z | wc -l
如果你愿意,可以贴出 ps 或 top 的输出,我可以帮你具体分析是哪一个服务产生僵尸进程。