在 Ubuntu(以及其它 Linux 发行版)中,僵尸进程(Zombie / defunct 进程)是已经结束但父进程还没回收其退出状态的进程。下面给你几种统计和查看僵尸进程的方法。
psps aux | awk '$8 ~ /Z/ {print $2}'
统计数量:
ps aux | awk '$8 ~ /Z/ {z++} END {print z+0}'
top在 top 界面中:
Tasks: 210 total, 1 running, 208 sleeping, 0 stopped, 1 zombie
最后一列 zombie 就是僵尸进程数。
htop(推荐)sudo apt install htop
htop
Z 快速筛选ps -eo pid,ppid,stat,comm | awk '$3 == "Z"'
字段说明:
PID:僵尸进程 IDPPID:父进程 ID(关键)STAT:Z 表示僵尸ps -o ppid= -p <僵尸PID>
例如:
ps -o ppid= -p 12345
然后查看父进程:
ps -p <PPID>
/proc 统计(底层方式)for p in /proc/[0-9]*; do
if [ "$(cat $p/stat 2>/dev/null | awk '{print $3}')" = "Z" ]; then
echo $p
fi
done
❌ 不能直接 kill 僵尸进程
kill -9 <僵尸PID> # 无效
正确做法:
kill -9 <父进程PID>
父进程死后,僵尸会被 init/systemd 回收wait()如果你愿意,可以告诉我:
我可以帮你定位并彻底解决。