温馨提示×

centos怎样找出僵尸进程

小樊
42
2026-09-12 04:26:21
栏目: 智能运维

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


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

1. 查看所有僵尸进程

ps -A -ostat,ppid,pid,cmd | grep -e '^[Zz]'

或更常见写法:

ps aux | grep ' Z '

2. 只统计僵尸进程数量

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

或

ps -e -o stat | grep Z | wc -l

二、使用 top 命令

top

在 top 界面中:

  • 看右上角或汇总区
  • zombie 字段显示僵尸进程数量

示例:

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

三、查看进程状态为 Z 的进程

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

字段说明:

  • PID:僵尸进程 ID
  • PPID:父进程 ID(关键)
  • STAT:Z 表示僵尸

四、通过 /proc 查找(进阶)

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

五、僵尸进程的解决方法(重要)

⚠️ 僵尸进程不能直接 kill

正确处理方式:

  1. 找到父进程 PPID
ps -eo pid,ppid,stat,cmd | awk '$3 == "Z"'
  1. 重启或杀死父进程
kill -9 父进程PID

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


六、常见原因

  • 父进程未调用 wait()
  • 程序 bug(如多线程未正确处理子进程)
  • 服务异常(Java / Python / C 程序常见)

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

0 踩