温馨提示×

如何统计ubuntu僵尸进程

小樊
43
2026-09-13 05:13:14
栏目: 智能运维

在 Ubuntu(及其他 Linux 发行版)中,“僵尸进程(Zombie / defunct 进程)”是已经结束执行、但其父进程尚未调用 wait() 回收其退出状态的进程。统计僵尸进程主要从查看数量定位来源两方面入手。


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

方法 1:使用 ps

ps aux | awk '$8 ~ /Z/ {print $0}' | wc -l

或更直接:

ps -eo stat | grep Z | wc -l

说明:

  • Z 表示僵尸状态
  • wc -l 统计行数(即僵尸进程数)

方法 2:使用 top

top

在顶部可以看到:

Tasks: 250 total,   1 running, 248 sleeping,   0 stopped,   1 zombie

其中 zombie 就是僵尸进程数量。


方法 3:使用 htop(需安装)

sudo apt install htop
htop

僵尸进程通常显示为灰色,并标注 Z


二、查看具体是哪些僵尸进程

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

示例输出:

 1234  1000 Z    java
  • PID:僵尸进程 ID
  • PPID:父进程 ID(关键)

三、定位“谁产生了僵尸进程”

僵尸进程无法被 kill,只能由父进程回收。

查看父进程信息:

ps -p <PPID> -o pid,ppid,cmd

如果父进程是你自己的程序:

  • 修复程序,确保 wait() / waitpid()
  • 或重启父进程(如服务)

如果父进程是 init / systemd(PID 1):

  • 通常系统会自动回收
  • 若长期存在,可能是 bug

四、常见处理建议

✅ 正常情况:

  • 少量僵尸进程,短期存在,无影响

⚠️ 异常情况:

  • 僵尸进程持续增多
  • 父进程是长期运行的服务(如 Java / Python / Node)

解决方式:

  1. 重启父进程服务
    sudo systemctl restart <service>
    
  2. 若父进程异常,考虑 kill -9 <PPID>(谨慎)

五、脚本:定时统计僵尸进程(可选)

#!/bin/bash
count=$(ps -eo stat | grep -c Z)
echo "$(date) Zombie count: $count" >> /var/log/zombie.log

加入 cron

* * * * * /path/to/script.sh

如果你愿意,可以贴出:

  • ps -eo pid,ppid,stat,comm | awk '$3=="Z"' 的输出,我可以帮你分析具体原因。

0