温馨提示×

Debian僵尸进程如何查看

小樊
36
2026-08-26 12:17:31
栏目: 智能运维

在 Debian(以及大多数 Linux 系统)中,**僵尸进程(Zombie / Z 状态进程)**本质上是已经结束、但父进程还没有回收其资源的进程。它们不占用 CPU 或内存,但会占用 PID。

下面给你几种常用查看方法,从简单到进阶。


一、最常用:用 ps 查看僵尸进程

1️⃣ 查看所有僵尸进程

ps aux | awk '$8=="Z"'

或更直观一点:

ps -eo pid,ppid,stat,cmd | grep Z

输出示例

1234  1000  Z   [test] <defunct>

含义:

  • Z:僵尸状态
  • <defunct>:已失效进程
  • PPID:父进程 ID(关键)

2️⃣ 查看进程状态统计(是否真的有僵尸)

ps -eo stat | sort | uniq -c

示例输出:

    1 Z
  120 S
   30 R

如果看到 Z,说明系统中有僵尸进程。


二、用 top 实时查看

top

top 中:

  • S 列(进程状态)
  • Z 表示僵尸进程

也可以按:

f → 选择 STAT → 回车

三、查看僵尸进程的父进程(非常重要)

僵尸进程不能直接 kill,只能处理它的父进程。

ps -eo pid,ppid,stat,cmd | grep Z

然后查看父进程:

ps -p <PPID> -o pid,ppid,cmd

四、为什么会有僵尸进程?

常见原因:

  • 父进程没有调用 wait() / waitpid()
  • 父进程是长期运行的服务(如 Java、Python、shell 脚本)
  • 程序 bug 或设计问题

五、如何处理僵尸进程?

❌ 错误做法

kill -9 僵尸PID   # 无效

✅ 正确做法

方法 1:重启父进程(最常用)

kill -9 父进程PID

⚠️ 注意:

  • 父进程退出后,僵尸进程会被 init(或 systemd)接管并清理

方法 2:让父进程正确回收子进程

  • 修复程序代码
  • 使用 wait() / waitpid()(C)
  • Python:subprocess.wait()
  • Shell:不要忽略 SIGCHLD

方法 3:父进程是 init / systemd(少见)

systemctl restart 对应服务

六、判断是否需要处理?

不需要处理的情况

  • 僵尸数量很少(1~2 个)
  • 系统运行正常

⚠️ 需要处理的情况

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

七、一句话总结

僵尸进程看 ps -eo pid,ppid,stat,cmd | grep Z,处理靠父进程,而不是僵尸本身。

如果你愿意,可以把你看到的僵尸进程贴出来,我可以帮你判断该不该处理、怎么处理最安全

0