在 Debian(以及其他 Linux 发行版)中,**僵尸进程(Zombie / defunct 进程)**是指已经结束运行、但父进程还没有调用 wait() 回收其退出状态的进程。它们不占用 CPU 和内存,但会占用 PID。
下面从查看、统计、处理几个方面说明。
ps 命令ps aux | awk '$8 ~ /Z/ {print}'
或更直观地:
ps -ef | grep defunct
字段说明:
Z 或 defunct 表示僵尸状态toptop
在任务统计区能看到:
Tasks: 210 total, 1 running, 208 sleeping, 0 stopped, 1 zombie
ps aux | awk '$8 ~ /Z/ {count++} END {print count}'
/proc 统计for p in /proc/[0-9]*; do
if [ "$(cat $p/stat 2>/dev/null | awk '{print $3}')" = "Z" ]; then
((count++))
fi
done
echo $count
僵尸进程不能直接 kill,只能处理其父进程:
ps -o pid,ppid,stat,comm -p <僵尸PID>
或批量查看:
ps -eo pid,ppid,stat,comm | awk '$3=="Z"'
systemctl restart <服务名>
或
kill -TERM <PPID>
kill -9 <PPID>
⚠️ 注意:
init(PID 1),不能杀wait()monitzabbix如果你愿意,可以贴一下:
ps -eo pid,ppid,stat,comm | awk '$3=="Z"'
的输出,我可以帮你具体分析是哪一个服务的问题。