在 CentOS(以及大多数 Linux 发行版)中,查找**僵尸进程(Zombie Process)**通常通过 ps、top 等命令完成。下面给你几种常用且实用的方法。
kill 直接杀掉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(关键)top 查看top
在 top 界面中:
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
ps -eo stat | grep -c 'Z'
输出为数字,例如:
2
表示当前有 2 个僵尸进程。
僵尸进程不能被杀,只能由父进程回收。
ps -eo pid,ppid,stat,cmd | grep 'Z'
示例:
PID PPID STAT CMD
1234 1000 Z [test] <defunct>
其中:
1234:僵尸进程1000:父进程 PIDps -p 1000 -o pid,ppid,cmd
kill -HUP 1000
或:
systemctl restart 服务名
kill -9 1000
父进程退出后,僵尸进程会被
init(PID 1)接管并自动回收。
kill -9 僵尸PID
✅ 没用,因为僵尸进程已经死了。
wait() / waitpid()| 目的 | 命令 |
|---|---|
| 查看僵尸进程 | 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 的输出贴出来,我可以帮你判断是哪个服务或程序在制造僵尸进程。