在 Ubuntu(以及其他 Linux 发行版)中,可以通过命令行查看僵尸进程(Zombie / defunct 进程)。下面给你几种常用方法。
僵尸进程是已经结束运行,但父进程还没有回收其退出状态的进程,状态通常显示为 Z(Zombie)。它们不占用 CPU 和内存,但会占用进程号(PID)。
ps 查看僵尸进程ps aux | grep Z
或更清晰地看状态:
ps -ef | awk '$8=="Z"'
常见输出示例:
user 1234 1200 0 10:00 ? 00:00:00 [process] <defunct>
其中:
Z 或 <defunct> 表示僵尸进程1234 是僵尸 PID1200 是其父进程 PID(PPID)top 实时查看top
在任务区看这一行:
Tasks: 210 total, 1 running, 208 sleeping, 0 stopped, 1 zombie
如果有 zombie > 0,说明系统中有僵尸进程。
按 f 然后选 STAT 可显示进程状态。
htop(更直观,需安装)sudo apt install htop
htop
僵尸进程通常显示为灰色,状态为 Z。
ps -eo pid,ppid,stat,cmd | grep ' Z'
示例:
1234 1200 Z [bash] <defunct>
说明:
⚠️ 不能直接 kill 僵尸进程
让父进程回收子进程
kill -HUP 1200
# 或
systemctl restart 服务名
如果父进程是 init(PID 1)
开发角度
wait() / waitpid()signal(SIGCHLD, SIG_IGN)ps -ef | grep defunct
或
ps aux | awk '$8=="Z"'
如果你愿意,可以把 ps 输出贴出来,我可以帮你判断该杀父进程还是重启服务。