1. 什么是僵尸进程?
僵尸进程是在子进程已经终止, 但其退出状态尚未被父进程读取时,仍然保留在进程表中的进程。尽管它们不会消耗系统资源,但会占用进程表项,可能导致系统无法创建新的进程。
例如, 在执行nvidia-smi
命令时, 看到有许多进程在运行, 但有些进程的Process name 栏只有一条横杠, 并没有名字, 那么这就有可能是僵尸进程.
2. 如何确认/通过PS命令查找僵尸进程
首先,找到系统中的僵尸进程, 可以使用 ps
命令方法, 列出所有进程并过滤出僵尸进程。
ps aux | grep 'Z'
这会显示类似以下的输出,其中 STAT 列显示为 Z 的进程即为僵尸进程。
username 1234 0.0 0.0 0 0 ? Z 10:00 0:00 [process_name] <defunct>
3. 清理僵尸进程
既然已经确定了僵尸进程, 那么如果想要杀死僵尸进程,或者重启这些进程,该怎么做呢?
首先, 查找僵尸进程的父进程.
ps -eo pid,ppid,stat,cmd | grep 'Z'
输出示例
1234 5678 Z [defunct]
在此示例中,1234 是僵尸进程的 PID,5678 是其父进程的 PID。
如果想要重启父进程,可以使用:
sudo kill -HUP 5678
如果想要直接杀掉父进程, 也可以使用常用的
sudo kill -9 5678