在 Debian(以及所有 Linux 系统)里,僵尸进程(Zombie / defunct)本身是不能直接“杀掉”的,因为它已经死了,只是还在进程表里留了个“尸体”等父进程来收尸。
正确思路是:杀掉或修复它的父进程。
ps -ef | grep defunct
# 或
ps aux | awk '$8 ~ /Z/'
状态为 Z 或显示 <defunct> 的就是僵尸进程。
ps -o pid,ppid,stat,cmd -p 僵尸PID
或者:
ps -el | grep Z
第二列通常是 PPID。
如果是你自己的程序:
wait() / waitpid()SIGCHLDkill -TERM 父进程PID
如果不行:
kill -9 父进程PID
父进程死后,僵尸会被 init / systemd (PID 1) 收养并自动清理。
如果是服务产生的:
systemctl restart 服务名
kill -9 僵尸PID # 无效
如果父进程是 init / systemd:
systemctl daemon-reexec
signal(SIGCHLD, SIG_IGN)systemd 管理进程如果你愿意,可以把 ps 输出贴出来,我可以帮你判断该杀哪个父进程。