温馨提示×

怎样查找centos僵尸进程

小樊
34
2026-08-04 16:12:05
栏目: 智能运维

在 CentOS(以及大多数 Linux 发行版)中,查找**僵尸进程(Zombie Process)**通常通过 pstop 等命令完成。下面给你几种常用且实用的方法。


一、什么是僵尸进程

  • 僵尸进程状态为 Z(Zombie)
  • 已经结束运行,但父进程尚未回收其资源
  • 不占用 CPU / 内存,但会占用进程号(PID)
  • 无法被 kill 直接杀掉

二、快速查找僵尸进程

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

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

或更直观一点:

ps aux | grep 'Z'

示例输出:

root      1234  0.0  0.0  0  0 ?        Z    10:00 [zombie_process] <defunct>

字段说明:

  • Z:僵尸状态
  • <defunct>:已失效进程
  • PPID:父进程 ID(关键)

方法 2:使用 top 查看

top

top 界面中:

  • S 列
  • 状态为 Z 的就是僵尸进程

示例:

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
1234 root      20   0     0    0    0 Z  0.0  0.0   0:00.00 zombie_process

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

ps -eo stat | grep -c 'Z'

输出为数字,例如:

2

表示当前有 2 个僵尸进程。


三、定位僵尸进程的“罪魁祸首”

僵尸进程不能被杀,只能由父进程回收

1️⃣ 查看僵尸进程的父进程

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

示例:

PID   PPID  STAT CMD
1234  1000  Z    [test] <defunct>

其中:

  • 1234:僵尸进程
  • 1000:父进程 PID

2️⃣ 查看父进程信息

ps -p 1000 -o pid,ppid,cmd

四、如何处理僵尸进程

✅ 正确做法:处理父进程

1. 重启或修复父进程

kill -HUP 1000

或:

systemctl restart 服务名

2. 如果父进程无响应

kill -9 1000

父进程退出后,僵尸进程会被 init(PID 1)接管并自动回收。


❌ 错误做法(无效)

kill -9 僵尸PID

没用,因为僵尸进程已经死了。


五、常见产生原因

  • 父进程未调用 wait() / waitpid()
  • 程序 bug(如多线程、fork 使用不当)
  • 守护进程异常退出
  • Java / Python 子进程未正确回收

六、总结速查表

目的 命令
查看僵尸进程 ps -eo pid,ppid,stat,cmd | grep Z
查看僵尸数量 ps -eo stat | grep -c Z
查看父进程 ps -p PPID -o pid,ppid,cmd
处理僵尸 重启 / 修复父进程
杀僵尸 ❌ 不可直接 kill

如果你愿意,可以把 ps -eo pid,ppid,stat,cmd | grep Z 的输出贴出来,我可以帮你判断是哪个服务或程序在制造僵尸进程

0