文章目录
Step 0
nvidia-smi
查询显存占用,可以看到PID
;
Step 1
cat /proc/PID/environ | tr '\0' '\n' | grep CONDA
查看该进程的环境变量,因为每个人用的conda
环境不一样,可以通过环境变量看出是谁在运行;
输出信息示例:
CONDA_PREFIX=/home/username/anaconda3/envs/myenv
CONDA_DEFAULT_ENV=myenv
Step 2
查询该进程的运行命令,单单清楚是在哪个环境上运行是不够的,
Method 1 : ps
命令
ps -p PID -o args=
将 PID 替换为你要查看的进程ID,这个命令会直接显示运行的完整命令行。
比如:ps -p 12345 -o args=
,输出类似于:python train.py --batch_size 32 --epochs 50
Method 2 : cat
命令读取 /proc/PID/cmdline
你还可以直接读取 /proc
文件系统中的 cmdline
文件,这个文件包含进程的完整命令行。
cat /proc/PID/cmdline
例如:cat /proc/12345/cmdline
,输出:pythontrain.py--batch_size32--epochs50
Method 3 : pstree
命令
如果你希望看到进程的父子关系和完整的命令,可以使用 pstree
。
pstree -p PID
Step 3
杀死命令
kill PID
kill -9 KID
pkill process_name
遇到僵尸进程了
用nvidia-smi
查不到进程,但是GPU的显存实实在在是被占用的;
fuser
命令查找
在0号
GPU上寻找
fuser -v /dev/nvidia0
杀死进程
- 用命令批量处理:
sudo fuser -v /dev/nvidia3 | awk '{for(i=1;i<=NF;i++)print "kill -9 " $i;}' | sudo sh
- 手动一个一个杀死(建议)
我害怕你用批量处理杀死了不该杀的东西。。。
僵尸进程
僵尸进程(Zombie Process)是指已经终止运行,但其进程表项仍然保留在操作系统中的进程。这种情况通常发生在一个进程(子进程)结束后,父进程没有及时调用系统调用(例如 wait()
或 waitpid()
)来读取子进程的退出状态,导致子进程的某些信息依然保存在进程表中。
这里我强调是僵尸进程
是想说有可能是从前某个意外结束的进程导致占用GPU(没谁抢你的GPU,自己曾经的程序给自己找麻烦,笨蛋)
参考
Chatgpt 4,上述命令我在Linux
试验过,杀死进程的时候注意即可;