在 Ubuntu(Linux)里,僵尸进程(Zombie / defunct)本身已经死了,它只是还留在进程表里等父进程来“收尸”。
所以:你不能“杀”僵尸进程,只能处理它的父进程。
下面按常见情况一步步来。
ps -l
或
ps -ef | grep defunct
如果 STAT 是 Z,就是僵尸进程。
ps -o pid,ppid,stat,cmd -C <进程名>
或
ps -ef | grep defunct
kill -CHLD 父进程PID
很多程序收到 SIGCHLD 后会清理僵尸。
如果父进程不处理:
kill 父进程PID
或强制:
kill -9 父进程PID
父进程死后,僵尸进程会被 init / systemd(PID 1) 接管并自动清理。
如果是服务产生的僵尸:
systemctl restart 服务名
例如:
systemctl restart nginx
kill -9 僵尸PID # 没用
因为它已经死了。
如果父进程是 1:
systemctl daemon-reexec
wait() / waitpid()signal(SIGCHLD, SIG_IGN)systemd 管理子进程僵尸进程杀不掉,只能杀父进程或重启父进程。
如果你愿意,可以把 ps -ef 的输出贴出来,我帮你看具体该杀哪个。