Linux 查看 Python 后台进程实际运行路径和文件路径

作者:

在 Linux 服务器中,经常会使用:

python3 app.py

启动 Python 程序。

但是运行一段时间后,通过:

ps -ef | grep app.py

查看进程时,可能只能看到:

root     17322 23123  0 Mar24 pts/12   05:28:54 python3 app.py

这里看不到:

  • 使用的是哪个 Python 解释器
  • app.py 文件实际在哪个目录

这时候可以通过 /proc 查看进程真实信息。


1. 查看 Python 解释器路径

先获取进程 PID:

PID = 17322

执行:

readlink -f /proc/17322/exe

输出:

/usr/local/python3.9.13/bin/python3.9

说明这个程序实际使用的 Python:

/usr/local/python3.9.13/bin/python3.9

而不是系统默认的:

/usr/bin/python3

2. 查看 app.py 所在目录

执行:

readlink -f /proc/17322/cwd

输出:

/root/newapi/222/fastapi2

这里表示程序启动时所在的工作目录。

因为启动命令是:

python3 app.py

所以实际运行的文件就是:

/root/newapi/222/fastapi2/app.py

3. 一条命令查看完整信息

以后遇到不知道路径的 Python 服务,可以执行:

PID=17322

echo "Python路径:"
readlink -f /proc/$PID/exe

echo "运行目录:"
readlink -f /proc/$PID/cwd

echo "启动命令:"
cat /proc/$PID/cmdline | tr '\0' ' '

输出类似:

Python路径:
/usr/local/python3.9.13/bin/python3.9

运行目录:
/root/newapi/222/fastapi2

启动命令:
python3 app.py

最终可以确定:

/usr/local/python3.9.13/bin/python3.9 /root/newapi/222/fastapi2/app.py

4. 为什么 uvicorn 可以直接看到路径?

例如:

uvicorn main:app --host 0.0.0.0 --port 6010

查看:

ps -ef | grep uvicorn

通常能看到:

/usr/local/bin/python3 /usr/local/bin/uvicorn main:app

原因是:

uvicorn 本身是一个可执行入口文件。

而:

python3 app.py

只是 Python 解释器加载脚本,Linux 进程参数只记录:

python3 app.py

不会自动展开成:

/usr/local/python3.9.13/bin/python3.9 /root/newapi/222/fastapi2/app.py

5. 生产环境建议

不要直接:

python3 app.py

建议使用绝对路径:

/usr/local/python3.9.13/bin/python3.9 \
/root/newapi/222/fastapi2/app.py

或者虚拟环境:

/root/newapi/venv/bin/python \
/root/newapi/222/fastapi2/app.py

这样以后查看:

ps -ef

就能快速确认运行环境。


总结

需求命令
查看 Python 路径readlink -f /proc/PID/exe
查看程序目录readlink -f /proc/PID/cwd
查看启动参数cat /proc/PID/cmdline | tr '\0' ' '

Linux 中即使 ps 看不到完整路径,也可以通过 /proc/PID 精确找到 Python 程序真实运行位置。