在 Debian(以及大多数 Linux 系统)中,**僵尸进程(Zombie / Z 状态进程)**本质上是已经结束、但父进程还没有回收其资源的进程。它们不占用 CPU 或内存,但会占用 PID。
下面给你几种常用查看方法,从简单到进阶。
ps 查看僵尸进程ps aux | awk '$8=="Z"'
或更直观一点:
ps -eo pid,ppid,stat,cmd | grep Z
输出示例
1234 1000 Z [test] <defunct>
含义:
Z:僵尸状态<defunct>:已失效进程PPID:父进程 ID(关键)ps -eo stat | sort | uniq -c
示例输出:
1 Z
120 S
30 R
如果看到 Z,说明系统中有僵尸进程。
top 实时查看top
在 top 中:
S 列(进程状态)Z 表示僵尸进程也可以按:
f → 选择 STAT → 回车
僵尸进程不能直接 kill,只能处理它的父进程。
ps -eo pid,ppid,stat,cmd | grep Z
然后查看父进程:
ps -p <PPID> -o pid,ppid,cmd
常见原因:
wait() / waitpid()kill -9 僵尸PID # 无效
kill -9 父进程PID
⚠️ 注意:
init(或 systemd)接管并清理wait() / waitpid()(C)subprocess.wait()SIGCHLDsystemctl restart 对应服务
✅ 不需要处理的情况
⚠️ 需要处理的情况
cat /proc/sys/kernel/pid_max)僵尸进程看
ps -eo pid,ppid,stat,cmd | grep Z,处理靠父进程,而不是僵尸本身。
如果你愿意,可以把你看到的僵尸进程贴出来,我可以帮你判断该不该处理、怎么处理最安全。