温馨提示×

ubuntu 如何查看僵尸进程

小樊
46
2026-08-11 22:35:49
栏目: 智能运维

在 Ubuntu(以及大多数 Linux 发行版)中,可以通过以下几种方式查看僵尸进程(Zombie Process)


一、什么是僵尸进程

僵尸进程是已经结束但还没有被父进程回收(wait)的进程,状态为 Z
它们不占用 CPU 或内存,但会占用 PID,数量过多可能导致无法创建新进程。


二、查看僵尸进程的方法

✅ 方法 1:使用 ps 命令(最常用)

ps aux | grep 'Z'

或更直观一点:

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

输出示例:

1234  1000  Z   [test] <defunct>

字段说明:

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

✅ 方法 2:使用 top

top

top 中查看:

  • 第二行 Tasks 中如果有:
1 zombie

说明系统中有僵尸进程

然后按:

f

进入字段选择,确保 S(状态)字段已显示,查看状态为 Z 的进程。


✅ 方法 3:使用 htop(更直观,需安装)

sudo apt install htop
htop

htop 中:

  • 状态为 Z 的进程
  • 或进程名后显示 <defunct>

✅ 方法 4:从 /proc 查看(高级)

ls /proc | grep '^[0-9]'

然后查看某个进程状态:

cat /proc/<pid>/status | grep State

如果是:

State:  Z (zombie)

三、如何清理僵尸进程(重点)

⚠️ 僵尸进程不能直接 kill

✅ 正确做法:处理它的父进程

  1. 找到僵尸进程的父进程 PID(PPID)
ps -eo pid,ppid,stat,cmd | grep Z
  1. 查看父进程
ps -p <ppid> -o pid,ppid,cmd
  1. 让父进程回收子进程
  • 如果是程序 bug:重启父进程
  • 如果是服务:
sudo systemctl restart 服务名
  1. 极端情况(不推荐):
sudo kill -9 <ppid>

四、僵尸进程常见原因

  • 父进程未调用 wait() / waitpid()
  • 父进程是长期运行的服务(如 Java、Python、Shell 脚本)
  • 多线程程序中子进程处理不当

五、总结(速查)

# 查看僵尸进程
ps -eo pid,ppid,stat,cmd | grep Z

# top 中查看
top

# 清理方式
重启父进程

如果你愿意,可以把 ps -eo pid,ppid,stat,cmd | grep Z 的输出贴出来,我可以帮你分析是哪个服务或程序导致的僵尸进程

0