在 Ubuntu(以及其它 Linux 系统)中,僵尸进程(Zombie / defunct)本身是不能直接“杀掉”的,因为它已经结束了,只是还在进程表里留下一个退出状态等待父进程回收。
ps aux | grep Z
# 或
top
状态为 Z 或 Z+ 的就是僵尸进程。
ps -l
STAT 列为 Z 也是僵尸。
ps -l -p <僵尸PID>
或者:
ps -eo pid,ppid,stat,comm | grep Z
假设:
如果父进程是正常程序(如 java / python / nginx worker):
kill -SIGCHLD 567
通知父进程回收子进程
如果父进程没反应:
kill -TERM 567
还不行就:
kill -KILL 567
⚠️ 杀父进程要小心,可能影响服务。
init / systemd(PPID=1)ps -o ppid= -p <僵尸PID>
如果是 1:
sudo systemctl daemon-reexec
或重启系统❌ kill -9 僵尸PID —— 没用
❌ pkill 僵尸名 —— 没用
因为:
僵尸进程已经死了,只是还没被“收尸”
wait() / waitpid()signal(SIGCHLD, SIG_IGN)(某些场景)systemd 管理服务ps -eo pid,ppid,stat,comm | awk '$3=="Z" {print}'
如果你愿意,可以把 ps aux 或 ps -l 的输出贴出来,我可以帮你具体判断该杀哪个父进程。