在 CentOS(以及大多数 Linux 发行版)中,可以通过以下几种方式找出僵尸进程(Zombie / Z 状态进程)。
ps 命令查看僵尸进程ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'
或更常见写法:
ps aux | grep ' Z '
ps aux | awk '$8 ~ /Z/ {print}'
或
ps -e -o stat | grep Z | wc -l
top 命令top
在 top 界面中:
zombie 字段显示僵尸进程数量示例:
Tasks: 210 total, 1 running, 208 sleeping, 0 stopped, 1 zombie
ps -eo pid,ppid,stat,cmd | awk '$3 == "Z"'
字段说明:
PID:僵尸进程 IDPPID:父进程 ID(关键)STAT:Z 表示僵尸/proc 查找(进阶)for p in /proc/[0-9]*; do
if [ "$(cat $p/status 2>/dev/null | awk '/State/{print $2}')" = "Z" ]; then
echo "Zombie: $p"
fi
done
⚠️ 僵尸进程不能直接 kill
ps -eo pid,ppid,stat,cmd | awk '$3 == "Z"'
kill -9 父进程PID
父进程退出后,僵尸进程会被 init(PID 1)回收。
wait()如果你愿意,可以把 ps 输出贴出来,我可以帮你分析是哪个程序产生了僵尸进程。