温馨提示×

ubuntu僵尸进程怎么查看

小樊
35
2026-10-18 20:33:18
栏目: 智能运维

在 Ubuntu(以及其他 Linux 系统)中,**僵尸进程(Zombie / defunct 进程)**是指已经结束执行、但父进程还没有回收其退出状态的进程。下面介绍几种常见的查看方式。


一、使用 ps 查看僵尸进程

1. 查看所有僵尸进程

ps aux | grep ' Z'

或

ps -ef | grep ' Z'

僵尸进程在 STAT 列通常显示为:

  • Z:僵尸进程
  • Z+:前台僵尸进程

示例:

user  1234  1200  0 10:00 ?  00:00:00 [process] <defunct>

2. 专门统计僵尸进程数量

ps aux | awk '$8 ~ /Z/ {print $2}'

或者只统计个数:

ps aux | awk '$8 ~ /Z/ {count++} END {print count}'

二、使用 top / htop

top

top

在顶部可以看到:

Tasks: 210 total,   1 running, 208 sleeping,   1 zombie

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

按 f 可以显示更多字段,确认进程状态。


htop(推荐)

sudo apt install htop
htop
  • 僵尸进程会显示为 Z
  • 可直观看到父进程 PID(PPID)

三、通过 /proc 查看

for p in /proc/[0-9]*; do
  if [ "$(cat $p/stat 2>/dev/null | awk '{print $3}')" = "Z" ]; then
    echo "Zombie PID: $(basename $p)"
  fi
done

四、查看僵尸进程的父进程

僵尸进程本身不能被 kill,需要让父进程回收它。

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

例如:

ps -o pid,ppid,stat,comm -p 1234

然后查看父进程:

ps -p <PPID>

五、如何处理僵尸进程

1. 通知父进程回收(推荐)

kill -SIGCHLD <父进程PID>

2. 重启或结束父进程

如果父进程异常:

kill <父进程PID>

若无效:

kill -9 <父进程PID>

父进程结束后,僵尸进程会被 init / systemd 接管并回收。


六、注意

  • ❌ 不能直接 kill -9 僵尸进程
  • ✅ 僵尸进程不占 CPU / 内存,只占用 PID
  • ✅ 大量僵尸进程通常说明程序有 bug(未 wait 子进程)

如果你愿意,可以把 ps 或 top 的输出贴出来,我可以帮你分析是哪个程序在产生僵尸进程。

0 踩