在 Debian(以及其他 Linux 发行版)中,僵尸进程(Zombie Process) 是指已经结束执行,但其父进程尚未调用 wait() 回收其退出状态的进程。它们不会占用 CPU 或内存,但会占用进程表项。
下面是统计和查看 Debian 僵尸进程的常用方法。
psps aux | awk '$8 ~ /Z/ {print}'
或只统计数量:
ps aux | awk '$8 ~ /Z/ {z++} END {print z+0}'
top在终端运行:
top
然后看右上角:
Tasks: 210 total, 1 running, 208 sleeping, 0 stopped, 1 zombie
其中 zombie 就是僵尸进程数量。
/proc 直接统计(推荐脚本用)count=0
for pid in /proc/[0-9]*; do
stat=$(awk '{print $3}' $pid/stat 2>/dev/null)
if [ "$stat" = "Z" ]; then
count=$((count+1))
fi
done
echo "Zombie processes: $count"
ps -eo pid,ppid,stat,comm | awk '$3=="Z"'
输出示例:
1234 1000 Z java
PID:僵尸进程 IDPPID:父进程 ID(关键)STAT=Z:僵尸状态⚠️ 不能直接 kill 僵尸进程
kill -9 PPID
或
systemctl restart 父进程服务
SIGCHLDwait() 使用不当zabbix / prometheus 监控 zombie 数if [ $(ps aux | awk '$8 ~ /Z/' | wc -l) -gt 10 ]; then
echo "Too many zombies!" | mail admin@x.com
fi
如果你愿意,可以贴出 ps -ef 或 top 的输出,我可以帮你分析是哪个程序在产生僵尸进程。