在 Ubuntu(以及大多数 Linux 系统)中,僵尸进程(Zombie Process) 是已经结束但还没有被父进程回收的进程。它们不占用 CPU 或内存,但会占用 PID,数量多了可能有问题。
下面给你几种常用查看方法。
ps 查看僵尸进程(最常用)ps aux | grep Z
或更直观一点:
ps -eo pid,ppid,stat,cmd | grep Z
输出示例:
1234 1000 Z [test] <defunct>
说明:
Z 表示 Zombie<defunct> 表示僵尸进程ppid 是它的父进程 PIDtop 查看top
在顶部信息中看这一行:
Tasks: 120 total, 1 running, 118 sleeping, 0 stopped, 1 zombie
如果有 zombie 数量 > 0,就说明存在僵尸进程。
然后按:
f → 选择显示字段S(进程状态)Enter可以看到哪些进程状态是 Z
htop(更直观,需安装)安装:
sudo apt install htop
运行:
htop
僵尸进程不能直接 kill,只能让父进程回收它。
ps -o pid,ppid,stat,cmd -p <僵尸PID>
或一次性看所有僵尸和父进程:
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/'
常见原因:
wait() / waitpid()⚠️ 不能 kill 僵尸进程
正确做法:
kill -9 父进程PID
父进程退出后,僵尸进程会被 systemd(PID 1)接管并回收。
wait() / waitpid()signal(SIGCHLD, SIG_IGN);
✅ 少量僵尸进程(1~2 个)通常 无害
❌ 大量僵尸进程(几十、上百)才需要处理
如果你愿意,可以把你 ps -eo pid,ppid,stat,cmd | grep Z 的输出贴出来,我可以帮你判断该不该处理、怎么处理。