温馨提示×

怎么统计ubuntu僵尸进程

小樊
37
2026-10-12 23:36:42
栏目: 智能运维

在 Ubuntu(以及其它 Linux 发行版)中,僵尸进程(Zombie / defunct 进程)是已经结束但父进程还没回收其退出状态的进程。下面给你几种统计和查看僵尸进程的方法。


一、快速统计僵尸进程数量

方法 1:使用 ps

ps aux | awk '$8 ~ /Z/ {print $2}'

统计数量:

ps aux | awk '$8 ~ /Z/ {z++} END {print z+0}'

方法 2:使用 top

在 top 界面中:

Tasks: 210 total,   1 running, 208 sleeping,   0 stopped,   1 zombie

最后一列 zombie 就是僵尸进程数。


方法 3:使用 htop(推荐)

sudo apt install htop
htop
  • 僵尸进程会显示为 Z
  • 可在过滤框输入 Z 快速筛选

二、查看僵尸进程详细信息

ps -eo pid,ppid,stat,comm | awk '$3 == "Z"'

字段说明:

  • PID:僵尸进程 ID
  • PPID:父进程 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 僵尸进程

kill -9 <僵尸PID>   # 无效

正确做法:

  1. 重启或修复父进程
  2. 若父进程无响应:
    kill -9 <父进程PID>
    
    父进程死后,僵尸会被 init/systemd 回收

六、常见原因

  • 父进程未调用 wait()
  • 多线程程序中主线程异常退出
  • 服务 bug(如 Java / Python / C++ 程序)

如果你愿意,可以告诉我:

  • 僵尸进程数量多少?
  • 是哪个服务产生的(如 nginx / java / docker)?

我可以帮你定位并彻底解决。

0 踩