在 Linux 中,最直接、最可靠的方法是利用 /proc 文件系统。
假设你的进程 ID (PID) 是 12345,你可以使用以下几种方式:
方法一:最直观的方法 (ls)
Linux 的每个进程在 /proc 目录下都有一个对应的文件夹。exe 是一个符号链接,指向实际的二进制文件路径。
bash
ls -l /proc/12345/exe
-
输出示例:
textlrwxrwxrwx 1 root root 0 Nov 26 10:00 /proc/12345/exe -> /opt/app/my_go_program箭头
->后面的/opt/app/my_go_program就是该程序的绝对路径。
方法二:最干净的方法 (readlink)
如果你只需要路径字符串(例如用于脚本中),可以使用 readlink 命令,它只输出目标路径,不包含其他信息。
bash
readlink -f /proc/12345/exe
-
输出示例:
text/opt/app/my_go_program
方法三:使用 pwdx (注意区别)
有时候你可能想知道程序是在哪个目录下运行的 (工作目录),而不是程序文件本身在哪里。这时用 pwdx:
bash
pwdx 12345
-
输出示例:
text12345: /home/user/data这表示程序虽然可能在
/usr/bin里,但它是在/home/user/data目录下被启动的。
特殊情况提示
-
Permission denied:如果进程属于其他用户(如
root),你需要加上sudo:
sudo ls -l /proc/12345/exe -
显示
(deleted):如果你在 Go 程序运行时覆盖 了二进制文件(例如发布新版本时直接
cp覆盖),你可能会看到这样的输出:
/opt/app/my_go_program (deleted)这意味着内存中运行的进程对应的磁盘文件已经被删除了或替换了,但进程仍在运行旧版本的代码。