在 Debian(以及大多数 Linux 发行版)中,僵尸进程(Zombie / defunct)是已经结束但父进程还没回收的进程。下面给你几种常用、实用的查找方法。
ps aux | grep ' Z'
或更准确一点:
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/'
示例输出:
1234 1000 Z [myapp] <defunct>
说明:
Z 表示僵尸状态PID 是僵尸进程 IDPPID 是父进程 ID(关键)ps aux | awk '$8 ~ /Z/ {print}' | wc -l
或:
top
在 top 里看这一行:
Tasks: 210 total, 1 zombie
安装:
sudo apt install htop
运行:
htop
F4 过滤 Z僵尸自己无法杀掉,必须处理父进程:
ps -eo pid,ppid,stat,cmd | awk '$3=="Z"'
假设:
PID PPID STAT CMD
1234 1000 Z [test] <defunct>
说明 PID 1000 是父进程:
ps -p 1000 -o pid,cmd
kill -9 1234 # 无效
kill -TERM 1000
# 或
systemctl restart 服务名
父进程退出后,僵尸会被 init / systemd 回收。
wait()signal(SIGCHLD, SIG_IGN)fork() 后不 wait()ps -eo pid,ppid,stat,cmd | awk '$3=="Z" {print "Zombie:",$1,"Parent:",$2}'
如果你愿意,可以把:
ps aux 输出贴出来,我可以帮你判断具体该杀哪个、能不能安全重启。