温馨提示×

杀不掉ubuntu僵尸进程咋办

小樊
38
2026-10-10 02:36:50
栏目: 智能运维

在 Ubuntu(以及所有 Linux)上,僵尸进程(zombie / defunct)本身是不能被 kill 的,原因是:

僵尸进程已经“死了”,只是还在进程表里留了个壳,等父进程来回收它。

所以你 kill -9 是没用的。


一、先确认是不是僵尸进程

ps -l

如果 STAT 列是 Z,就是僵尸进程。

ps aux | grep Z

二、正确解决思路(重点)

✅ 1. 杀掉它的「父进程」

僵尸进程只能由 父进程 回收(wait())。

查父进程 PID

ps -o ppid= -p <僵尸PID>

杀父进程(谨慎)

kill -9 <父进程PID>

父进程死后,僵尸进程会被 init / systemd 接管并自动回收。

⚠️ 注意:

  • 父进程可能是重要服务(如 nginx、docker、java)
  • 杀父进程可能导致服务重启或中断

✅ 2. 重启相关服务(推荐)

如果是服务产生的僵尸:

systemctl restart 服务名

例如:

systemctl restart nginx
systemctl restart docker

✅ 3. 如果是你自己的程序

说明代码有问题:

  • 没有 wait() / waitpid()
  • 忽略了 SIGCHLD

修复方式(C 示例):

signal(SIGCHLD, SIG_IGN);

或用 waitpid(-1, NULL, WNOHANG)


三、什么情况下“不用管”

少量僵尸进程 不影响系统性能,只是占用 PID。 只有在:

  • 僵尸数量持续增长
  • PID 快耗尽(cat /proc/sys/kernel/pid_max)

时才需要处理。


四、实在不行

如果是系统 bug或内核问题:

reboot

这是最后手段。


如果你愿意,可以贴一下:

ps -ef | grep defunct

或者父进程名,我可以帮你判断能不能杀、该杀谁。

0 踩