温馨提示×

ubuntu怎么查僵尸进程

小樊
44
2026-10-04 05:07:18
栏目: 智能运维

在 Ubuntu(以及其他 Linux 发行版)中,可以通过命令行查看僵尸进程(Zombie / defunct 进程)。下面给你几种常用方法。


一、什么是僵尸进程

僵尸进程是已经结束运行,但父进程还没有回收其退出状态的进程,状态通常显示为 Z(Zombie)。它们不占用 CPU 和内存,但会占用进程号(PID)。


二、常用查看方法

方法 1:用 ps 查看僵尸进程

ps aux | grep Z

或更清晰地看状态:

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

常见输出示例:

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

其中:

  • Z 或 <defunct> 表示僵尸进程
  • 1234 是僵尸 PID
  • 1200 是其父进程 PID(PPID)

方法 2:用 top 实时查看

top

在任务区看这一行:

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

如果有 zombie > 0,说明系统中有僵尸进程。

按 f 然后选 STAT 可显示进程状态。


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

sudo apt install htop
htop

僵尸进程通常显示为灰色,状态为 Z。


方法 4:查看僵尸进程及其父进程

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

示例:

1234  1200  Z  [bash] <defunct>

说明:

  • 僵尸 PID:1234
  • 父进程 PID:1200

三、如何处理僵尸进程

⚠️ 不能直接 kill 僵尸进程

正确做法:

  1. 让父进程回收子进程

    • 重启父进程(推荐)
    kill -HUP 1200
    # 或
    systemctl restart 服务名
    
  2. 如果父进程是 init(PID 1)

    • 通常是系统异常,建议重启系统
  3. 开发角度

    • 父进程应使用 wait() / waitpid()
    • 或使用 signal(SIGCHLD, SIG_IGN)

四、一句话总结

ps -ef | grep defunct

或

ps aux | awk '$8=="Z"'

如果你愿意,可以把 ps 输出贴出来,我可以帮你判断该杀父进程还是重启服务。

0 踩