温馨提示×

debian怎么查僵尸进程

小樊
40
2026-09-01 23:48:40
栏目: 智能运维

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


一、使用 ps 命令查看僵尸进程

1. 查看所有僵尸进程

ps aux | awk '$8 ~ /Z/'

或更直接一点:

ps -ef | awk '$8 == "Z"'

2. 使用 stat 状态过滤

ps -eo pid,ppid,stat,cmd | awk '$3 == "Z"'

示例输出:

 1234  1000 Z   [test] <defunct>
  • Z 表示僵尸进程
  • <defunct> 表示已结束但未被父进程回收

二、使用 top / htop

top

top

在任务统计区看这一行:

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

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

f 可以显示 S(状态)列,查看为 Z 的进程。


htop(推荐)

sudo apt install htop
htop
  • F4 过滤 Z
  • 或通过颜色识别(僵尸通常是灰色)

三、从 /proc 查看(进阶)

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

四、僵尸进程的处理方式

⚠️ 僵尸进程不能直接 kill

原因

僵尸进程已经退出,只是保留 PID 和退出状态,等待父进程 wait()

正确解决方法

1. 找到父进程

ps -eo pid,ppid,stat,cmd | awk '$3 == "Z"'

假设父进程 PID 是 1000

2. 重启或杀死父进程(谨慎)

kill -TERM 1000

kill -9 1000

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


五、常见原因

  • 父进程未正确处理 SIGCHLD
  • 程序 bug(未调用 wait()
  • 服务异常(如 Java、Python 子进程管理不当)

如果你愿意,可以把 pstop 的输出贴出来,我可以帮你判断是哪个进程产生了僵尸。

0