温馨提示×

ubuntu 僵尸进程怎么查看

小樊
44
2026-08-23 19:10:33
栏目: 智能运维

在 Ubuntu(以及大多数 Linux 系统)中,僵尸进程(Zombie Process) 是已经结束但还没有被父进程回收的进程。它们不占用 CPU 或内存,但会占用 PID,数量多了可能有问题。

下面给你几种常用查看方法


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

ps aux | grep Z

或更直观一点:

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

输出示例:

1234  1000  Z   [test] <defunct>

说明:

  • Z 表示 Zombie
  • <defunct> 表示僵尸进程
  • ppid 是它的父进程 PID

二、用 top 查看

top

在顶部信息中看这一行:

Tasks: 120 total,   1 running, 118 sleeping,   0 stopped,   1 zombie

如果有 zombie 数量 > 0,就说明存在僵尸进程。

然后按:

  • f → 选择显示字段
  • 勾选 S(进程状态)
  • Enter

可以看到哪些进程状态是 Z


三、用 htop(更直观,需安装)

安装:

sudo apt install htop

运行:

htop
  • 僵尸进程通常显示为 灰色
  • 状态栏也会显示 zombie 数量

四、查看僵尸进程的父进程(关键)

僵尸进程不能直接 kill,只能让父进程回收它。

ps -o pid,ppid,stat,cmd -p <僵尸PID>

或一次性看所有僵尸和父进程:

ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/'

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

常见原因:

  • 父进程没有调用 wait() / waitpid()
  • 父进程写得不规范(如 bug)
  • 父进程先退出,子进程还没被 init/systemd 回收

六、怎么“清理”僵尸进程?

⚠️ 不能 kill 僵尸进程

正确做法:

1️⃣ 重启父进程(最常用)

kill -9 父进程PID

父进程退出后,僵尸进程会被 systemd(PID 1)接管并回收。


2️⃣ 如果是你自己的程序

  • 在父进程中正确处理子进程退出
  • 使用 wait() / waitpid()
  • 或忽略 SIGCHLD:
signal(SIGCHLD, SIG_IGN);

七、快速判断是否有问题

✅ 少量僵尸进程(1~2 个)通常 无害
❌ 大量僵尸进程(几十、上百)才需要处理


如果你愿意,可以把你 ps -eo pid,ppid,stat,cmd | grep Z 的输出贴出来,我可以帮你判断该不该处理、怎么处理

0