在 Debian(以及其他 Linux 发行版)中,僵尸进程(Zombie / Z 状态)本身是不能直接“杀掉”的,因为它已经退出,只是还在进程表里等着父进程回收。
正确处理方式是:找到并处理好它的父进程。
ps aux | grep Z
或
ps -lA | grep Z
状态为 Z 的就是僵尸进程。
ps -o pid,ppid,stat,cmd -p 僵尸PID
例如:
ps -o pid,ppid,stat,cmd -p 1234
看到 PPID 就是父进程 ID。
如果是你自己写的服务:
wait() / waitpid()SIGCHLD 信号如果你不能改代码,看下面。
kill -TERM 父进程PID
如果杀不掉:
kill -9 父进程PID
父进程死后,僵尸会被 init / systemd(PID 1)接管并自动回收。
如果 PPID = 1,且僵尸一直存在:
# 查看是否是 systemd 问题
systemctl status
一般:
kill -9 僵尸PID
僵尸进程已经死了,kill 对它无效。
ps -eo pid,ppid,stat,cmd | awk '$3=="Z"'
signal(SIGCHLD, SIG_IGN)(某些场景)systemd 管理服务如果你愿意,可以贴一下:
ps -eo pid,ppid,stat,cmd | awk '$3=="Z"'
的输出,我可以帮你具体分析是哪个服务的问题。