如何查看 Linux 下正在运行的 Python 程序是哪一个
在服务器上训练模型或者跑推理,经常会遇到一个典型问题:某个 GPU、某个 CPU 已经被占用,但是不知道是哪段 Python 在跑。想 kill,想知道它在跑什么文件,都不知道从哪找。
Linux 下最常用的思路只有两步:一,找 PID;二,通过 PID 把它启动时的命令行完整还原出来。
一
找到 PID
可以直接用 ps 去过滤 python
bash
ps aux | grep python
ps aux 解释:
ps:process status(进程状态)
a:显示所有用户的进程(all users)
u:以 user 的方式显示字段(会显示 USER / START / %MEM 等)
x:显示没有 tty 的进程(daemon / nohup / 后台也能显示)
grep python 就是把输出中包含 python 的行筛选出来(注意不要把自身 grep 的行当成目标)
也可以用 top 交互式查看
bash
top
找到 python 那一行,例如 PID = 21566
二
通过 PID 取出它的完整命令行
第一种更人类阅读的方式:
bash
ps -p 21566 -o cmd
它会告诉你当时这段 python 是用什么命令启动的,例如:
python train.py --data coco.yaml --epoch 300
ps -p 解释:只显示指定 PID
-o cmd:o=output,输出字段,这里只要 cmd(启动命令)
第二种更底层的方式:
bash
cat /proc/21566/cmdline | tr '\0' ' '
/proc/PID/cmdline 是内核暴露出来的实际启动命令(参数之间用 0 字节分隔)
tr 是 translate,将 0字节替换成空格,从而变成可读文本。
三
总结
流程记一个:
1 找 PID → ps aux | grep python 或 top
2 用 PID 取命令 → ps -p PID -o cmd 或 cat /proc/PID/cmdline | tr '\0' ' '
无论是自己正在跑训练,还是别人占用了 GPU,只要有 PID,就能完全知道它在跑哪一个 python 文件,用了哪些参数,在干什么。
这两步是排查"到底是哪一段 python 正在运行"的最标准方法,建议记住。