温馨提示×

ubuntu 僵尸进程是什么状态

小樊
51
2026-08-23 19:21:31
栏目: 智能运维

在 Ubuntu(以及所有 Linux 系统)中,僵尸进程(Zombie Process)指的是已经结束运行,但还没有被父进程回收的进程

一、僵尸进程的状态

pstop 等工具中,僵尸进程的状态显示为:

Z

全称是 Zombie

例如:

ps aux | grep Z

可能会看到:

user     12345  0.0  0.0   0   0 ?        Z    10:00   0:00 [process] <defunct>

Z<defunct> 都表示这是一个僵尸进程。


二、僵尸进程是怎么产生的?

  1. 子进程先退出
  2. 父进程没有调用 wait() / waitpid() 回收子进程
  3. 子进程:
    • 已经结束
    • 不再占用 CPU、内存等资源
    • 只保留一个进程表项(PID、退出状态)
  4. 这个残留的进程表项就是僵尸进程

三、僵尸进程占不占资源?

几乎不占资源

  • 不占 CPU
  • 不占内存
  • 不占文件描述符

但会占用 PID

  • 如果大量僵尸进程存在,可能导致 PID 耗尽,无法创建新进程

四、僵尸进程能不能直接 kill?

不能

因为:

  • 僵尸进程已经死了
  • kill -9 无效

正确做法

  • 让父进程回收它
  • 或者 结束父进程

五、如何处理僵尸进程?

方法 1:让父进程正确回收(推荐)

父进程应调用:

wait(NULL);

waitpid(pid, &status, 0);

方法 2:杀掉父进程

kill -9 父进程PID
  • 父进程死后
  • 僵尸进程会被 init(或 systemd,PID 1)接管
  • init 会自动 wait() 回收

六、为什么系统允许僵尸进程存在?

因为:

  • 子进程的退出码需要保存
  • 父进程可能稍后才会读取
  • 这是 Unix/Linux 进程设计的一部分

七、简单总结

项目 说明
状态 Z(Zombie)
是否运行 ❌ 已死亡
是否可 kill ❌ 不可
是否占资源 ❌ 几乎不占
解决方法 修复父进程或杀父进程

如果你愿意,我可以帮你:

  • 分析 ps 输出
  • 写一段 C / Python 示例产生并回收僵尸进程
  • 排查你服务器上的僵尸进程来源

0