在 CentOS / RHEL 系统中,可以通过以下几种方式查看 僵尸进程(Zombie / Z 状态进程)。
wait() 回收ps(最常用)ps -eo pid,ppid,stat,cmd | grep ' Z'
说明:
-e:所有进程-o pid,ppid,stat,cmd:显示 PID、父 PID、状态、命令Z 表示僵尸状态示例输出:
1234 1000 Z [test] <defunct>
toptop
在 top 界面中:
Z,就是僵尸进程Tasks: 120 total, 1 zombie
htop(需安装)yum install -y htop
htop
Zps aux | awk '$8=="Z" { print $0 }'
或统计数量:
ps aux | awk '$8=="Z"' | wc -l
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/'
PPID 就是父进程kill -9 僵尸进程PID # 无效
处理父进程
SIGCHLDkill -s SIGCHLD 父进程PID
kill 父进程PID
如果父进程是
init(PID 1),不要随便 kill
fork 但没 wait| 操作 | 命令 |
|---|---|
| 查看僵尸进程 | 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 的输出贴出来,我可以帮你分析是哪个程序导致的僵尸进程。