2.7 进程
约 879 字大约 3 分钟
2025-05-06
2.7.1 垃圾进程
https://blog.csdn.net/qq_43619271/article/details/138166254
https://zhuanlan.zhihu.com/p/506686899
解决方法零
Kill Process 后依然占用显存并显示 No Such Process
查找僵尸进程:
ps aux | grep 'Z' # 僵尸进程(状态为 `Z` 或 `Zl`)确认僵尸进程的父进程
ps -o ppid= -p <僵尸进程PID>终止父进程:找到父进程后,终止它:
kill -9 <父进程PID>
解决方法一
使用
fuser查找占用显卡资源的进程命令可以查看哪些进程正在使用 GPU 设备。命令如下:
fuser -v /dev/nvidia*这会列出所有正在占用显卡资源的进程及其相关信息。
确认占用 GPU 的进程
查找进程信息:通过
fuser找到进程号(PID)后,可以使用以下命令查看进程的详细信息:ps -ef | grep <PID>这样可以确认是否是想要的程序
强制终止进程
如果确认进程是相关程序,强制终止进程:
kill -9 <PID>
解决方法二
所以如果知道 No Such Process 对应的 command 中有什么独特的字段的话,比如 No Such Process 原本的 command 中,有一段独有的字段 mixed,那么就可以通过指令
ps aux | grep mixed | grep -v grep | awk '{print $2}' | xargs kill借助这个 command,可以终止所有与“mixed”相关的进程
ps aux:ps命令用于列出当前系统上所有的进程。aux是选项,表示:a: 显示所有用户的进程,不仅仅是当前用户的进程(最好不加)u: 以用户为中心显示进程x: 显示没有控制终端的进程
grep mixed:grep是用来过滤文本内容的命令。这里它的作用是查找包含 "mixed" 字符串的进程信息
grep -v grep:grep -v grep这个部分是排除掉包含“grep”字符串的行。因为上一条命令中也会出现包含“grep mixed”的进程,这会导致我们匹配到自己当前执行的grep命令,所以用-v来排除掉这一行
awk '{print $2}':awk是一个文本处理工具,'{print $2}'表示输出每一行的第二列,这一列通常是进程的 PID
xargs kill:xargs会将从前面命令传递过来的 PID 列表作为参数传递给kill命令kill命令根据传入的 PID 来终止对应的进程
特殊:
查看僵尸进程的父进程 ID(PPID):
ps -o ppid= -p <僵尸进程PID>- 如果 PPID 是
1(init或systemd),说明父进程是系统级别的进程 - 如果 PPID 不存在,说明父进程已经退出
如果父进程是 init 或 systemd,通常系统会自动回收这些僵尸进程。如果它们仍然存在,可以尝试以下方法:
重启系统:重启系统是最简单的方法,可以彻底清理所有僵尸进程
手动触发系统回收:如果不想重启系统,可以尝试重新启动
systemd或init:sudo systemctl daemon-reload
批量清理僵尸进程
如果有多个僵尸进程,可以编写一个简单的脚本来批量清理它们:
for pid in $(ps aux | grep 'Z' | awk '{print $2}'); do
ppid=$(ps -o ppid= -p $pid)
echo "Killing parent process $ppid of zombie process $pid"
kill -9 $ppid
done这个脚本会找到所有僵尸进程并终止它们的父进程。(但是如果父进程是 1 就不行)