温馨提示×

如何查看ubuntu僵尸进程

小樊
48
2026-09-04 02:33:22
栏目: 智能运维

在 Ubuntu(以及其它 Linux 发行版)中,“僵尸进程(Zombie Process)”是指已经结束执行,但其父进程还没有调用 wait() 回收其退出状态的进程,状态通常显示为 Z

下面介绍几种查看和处理僵尸进程的方法。


一、查看僵尸进程

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

ps aux | grep Z

或只看状态列:

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

僵尸进程的状态通常是:

STAT = Z

示例输出:

USER   PID  PPID  STAT COMMAND
root   1234  567   Z    [python] <defunct>

方法 2:使用 top / htop

top

top 中查看:

  • f → 确保显示 S(状态)
  • 状态为 Z 的即为僵尸进程

或使用更直观的工具:

htop

(Ubuntu 默认未安装,可用 sudo apt install htop


方法 3:查看系统僵尸进程总数

ps aux | awk '$8=="Z"' | wc -l

或在 /proc 中统计:

cat /proc/stat | grep procs

二、僵尸进程关键信息说明

PID   :僵尸进程 ID
PPID  :父进程 ID(关键)
STAT  :Z 表示僵尸
CMD   :原进程名(通常带 <defunct>)

三、如何处理僵尸进程

⚠️ 注意
你不能直接 kill 僵尸进程,因为它已经死了。
只能通过其父进程来解决。

方案 1:让父进程回收(推荐)

找到父进程:

ps -o ppid= -p <僵尸PID>

然后:

  • 重启父进程(如服务)
sudo systemctl restart 服务名
  • 或杀掉父进程(谨慎)
kill -TERM <PPID>

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


方案 2:父进程是 init(PID 1)

如果 PPID = 1,但仍有僵尸:

ps -o pid,ppid,stat,cmd -p 1

通常是系统 bug,建议:

  • 升级系统
  • 重启服务器(最后手段)

四、防止僵尸进程(开发角度)

如果你是开发者:

  • 父进程应使用 wait() / waitpid()
  • 或使用 signal(SIGCHLD, SIG_IGN) 自动回收子进程
  • 使用 systemd 管理服务进程

五、总结速查表

# 查看僵尸进程
ps -eo pid,ppid,stat,cmd | awk '$3=="Z"'

# 查看父进程
ps -o ppid= -p <PID>

# 重启父进程服务
sudo systemctl restart <service>

如果你愿意,可以把 ps 输出贴出来,我可以帮你分析具体是哪个服务导致的。

0