温馨提示×

什么是ubuntu僵尸进程状态

小樊
37
2026-09-07 06:59:28
栏目: 智能运维

Ubuntu(以及一般的 Linux 系统) 中,僵尸进程(Zombie Process) 是指已经结束运行,但其进程表项(PCB)尚未被父进程回收的进程

下面从状态、原理、查看方式和处理方法几个方面说明。


一、僵尸进程的状态是什么?

pstop 中,僵尸进程的状态通常显示为:

Z

或者完整显示:

Z+   (表示僵尸进程且在前台进程组)

psSTAT 列中含义:

  • Z = zombie(僵尸)
  • Z+ = 僵尸 + 前台进程

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

  1. 子进程调用 exit() 结束
  2. 内核保留其进程描述符(PID、退出码等)
  3. 父进程 没有调用 wait() / waitpid()
  4. 子进程变成僵尸,等待父进程回收

僵尸进程 不占用 CPU、内存,只占用一个 PID 和进程表项。


三、如何查看僵尸进程?

1. 使用 ps

ps aux | grep Z

或查看状态列:

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

2. 使用 top

top

在任务统计中可以看到:

Tasks: 210 total,   1 zombie

四、僵尸进程有什么危害?

  • 单个僵尸进程一般无害
  • 大量僵尸进程会:
    • 耗尽 PID 资源
    • 导致无法创建新进程
    • 反映程序存在 bug(父进程未回收子进程)

五、如何处理僵尸进程?

✅ 正确做法

1. 让父进程回收子进程

  • 在代码中调用:
    wait(NULL);
    
    signal(SIGCHLD, SIG_IGN);
    

2. 杀死父进程(间接清理)

kill -9 父进程PID
  • 父进程死后,僵尸进程被 init / systemd 接管并回收

❌ 错误做法

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

六、总结一句话

Ubuntu 中的僵尸进程状态是 Z,表示进程已退出但未被父进程回收,只占 PID 不占资源。

如果你愿意,我也可以:

  • 帮你分析具体的 ps 输出
  • 看一段 C / Python 代码为什么产生僵尸
  • 教你写防僵尸的守护进程

0