在 Debian(以及其他 Linux 发行版)里,僵尸进程(Zombie / defunct 进程)本质上是已经结束、但父进程还没回收它退出状态的进程。下面从怎么看、怎么判断、怎么处理三方面说。
ps 看ps aux
或更好用:
ps -ef
看 STAT(状态)列:
Z 或 Z+ → 僵尸进程<defunct>示例:
user 1234 1200 0 10:00 ? 00:00:00 [python] <defunct>
ps aux | awk '$8 ~ /Z/'
或
ps -eo pid,ppid,stat,cmd | grep ' Z'
top
在概览里看:
Tasks: 210 total, 1 zombie
或者用:
cat /proc/loadavg
(最后一列不是僵尸数,不推荐)
僵尸进程的详细信息在:
cat /proc/<PID>/status
重点看:
State: Z (zombie)PPid:(父进程是谁)你不能直接 kill 僵尸进程
因为它已经“死”了,只是还没被回收。
ps -o pid,ppid,stat,cmd -p <僵尸PID>
kill -TERM <PPID>
如果父进程不处理,可:
kill -KILL <PPID>
父进程死后,僵尸会被 init / systemd (PID 1) 收养并回收。
僵尸进程通常是:
wait() / waitpid()fork() 模式SIGCHLD开发层面:
signal(SIGCHLD, SIG_IGN)(某些情况)❌ kill -9 僵尸PID → 无效
❌ 僵尸会占 CPU → 不会
✅ 僵尸只占用 一个 PID 和一点内核结构
但如果僵尸很多,说明父进程有 bug。
# 看僵尸
ps aux | awk '$8 ~ /Z/'
# 看数量
top
# 看父进程
ps -o pid,ppid,stat,cmd -p <ZPID>
# 回收方式
kill -TERM <PPID>
如果你愿意,可以把:
ps -eo pid,ppid,stat,cmd | grep ' Z'
的输出贴出来,我可以帮你判断该杀哪个父进程、是否安全。