温馨提示×

centos 怎么查看僵尸进程

小樊
48
2026-07-21 00:21:22
栏目: 智能运维

CentOS / RHEL 系统中,可以通过以下几种方式查看 僵尸进程(Zombie / Z 状态进程)


一、什么是僵尸进程

  • 状态为 Z(Zombie)
  • 已经结束,但父进程还没有调用 wait() 回收
  • 不占用 CPU / 内存,但会占用进程号(PID)

二、查看僵尸进程的方法

✅ 方法 1:使用 ps(最常用)

ps -eo pid,ppid,stat,cmd | grep ' Z'

说明:

  • -e:所有进程
  • -o pid,ppid,stat,cmd:显示 PID、父 PID、状态、命令
  • Z 表示僵尸状态

示例输出:

 1234  1000 Z    [test] <defunct>

✅ 方法 2:使用 top

top

top 界面中:

  • S 列
  • 如果看到 Z,就是僵尸进程
  • 右上角通常会显示:
Tasks: 120 total, 1 zombie

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

yum install -y htop
htop
  • 如果进程状态是 Z
  • 或颜色异常(通常是灰色)

✅ 方法 4:直接统计僵尸进程数量

ps aux | awk '$8=="Z" { print $0 }'

或统计数量:

ps aux | awk '$8=="Z"' | wc -l

三、如何找到僵尸进程的父进程

ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/'
  • PPID 就是父进程
  • 僵尸进程本身 无法被 kill

四、如何处理僵尸进程(重点)

❌ 错误做法

kill -9 僵尸进程PID   # 无效

✅ 正确做法

处理父进程

1️⃣ 向父进程发送 SIGCHLD

kill -s SIGCHLD 父进程PID

2️⃣ 如果父进程不处理,直接重启或杀掉父进程

kill 父进程PID

如果父进程是 init(PID 1),不要随便 kill


五、常见原因

  • 程序 bug(未正确处理子进程)
  • 守护进程 / 脚本频繁 fork 但没 wait
  • Java / Python / Shell 脚本常见问题

六、总结

操作 命令
查看僵尸进程 ps -eo pid,ppid,stat,cmd | grep Z
查看数量 ps aux | awk '$8=="Z"' | wc -l
查看父进程 ps -eo pid,ppid,stat,cmd
清理方式 处理父进程

如果你愿意,可以把 ps -eo pid,ppid,stat,cmd 的输出贴出来,我可以帮你分析是哪个程序导致的僵尸进程。

0