在 Ubuntu(以及大多数 Linux 系统)中,可以通过以下几种方式查看僵尸进程(Zombie Process)。
僵尸进程的状态是 Z(Zombie),表示:
wait() / waitpid() 回收其资源⚠️ 僵尸进程不占用 CPU / 内存,但会占用 PID。
ps 查看僵尸进程(最常用)ps aux | grep 'Z'
或更准确:
ps -eo pid,ppid,stat,cmd | grep 'Z'
示例输出:
1001 999 Z [zombie_proc] <defunct>
字段说明:
Z:僵尸状态<defunct>:已失效进程ppid:父进程 PID(关键)ps -e -o pid,ppid,stat,cmd | awk '$3 ~ /Z/'
top 查看top
在 top 中:
fS(进程状态)Z或在汇总信息中看到:
Tasks: 123 total, 1 zombie
htop(更直观,需安装)sudo apt install htop
htop
Z僵尸进程不能直接 kill,需要找父进程:
ps -o pid,ppid,stat,cmd -p <僵尸PID>
然后查看父进程状态:
ps -p <PPID> -o pid,stat,cmd
wait() / waitpid()kill -HUP <PPID>
或systemctl restart <service>
kill -9 <僵尸PID> # ❌ 没用
如果父进程是 1:
ps -o pid,ppid,stat,cmd -p <僵尸PID>
说明:
init/systemd 接管| 操作 | 命令 |
|---|---|
| 查看僵尸进程 | ps -eo pid,ppid,stat,cmd | grep Z |
| top 中查看 | top → 看 Tasks |
| 查看父进程 | ps -o ppid -p <PID> |
| 清除僵尸 | 重启 / 修复父进程 |
| 直接 kill 僵尸 | ❌ 无效 |
如果你愿意,可以把 ps -eo pid,ppid,stat,cmd 的输出贴出来,我可以帮你分析具体是哪个程序在产生僵尸进程。