通过Linux进程id找到程序路径

在 Linux 中,最直接、最可靠的方法是利用 /proc 文件系统。

假设你的进程 ID (PID) 是 12345,你可以使用以下几种方式:

方法一:最直观的方法 (ls)

Linux 的每个进程在 /proc 目录下都有一个对应的文件夹。exe 是一个符号链接,指向实际的二进制文件路径。

bash 复制代码
ls -l /proc/12345/exe
  • 输出示例:

    text 复制代码
    lrwxrwxrwx 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
  • 输出示例:

    text 复制代码
    12345: /home/user/data

    这表示程序虽然可能在 /usr/bin 里,但它是在 /home/user/data 目录下被启动的。


特殊情况提示

  1. Permission denied :

    如果进程属于其他用户(如 root),你需要加上 sudo:
    sudo ls -l /proc/12345/exe

  2. 显示 (deleted) :

    如果你在 Go 程序运行时覆盖 了二进制文件(例如发布新版本时直接 cp 覆盖),你可能会看到这样的输出:
    /opt/app/my_go_program (deleted)

    这意味着内存中运行的进程对应的磁盘文件已经被删除了或替换了,但进程仍在运行旧版本的代码。

相关推荐
阳光九叶草LXGZXJ11 小时前
达梦数据库-报错-15-列【XXX】长度超出定义
linux·运维·数据库·sql·学习
奔跑的大白啊11 小时前
多容器共享目录权限踩坑记
linux·ubuntu·共享目录·linux权限·docker 容器化部署
正在走向自律13 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
OnlineProxy14 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
盟接之桥14 小时前
当大模型遇见线束制造:不是通用AI,而是行业AI
大数据·网络·人工智能·安全·制造
Android系统攻城狮14 小时前
Linux Gstreamer深度解析之gst_audio_encoder_set_frame_max调用流程与实战(六十一)
android·linux·运维·音视频·gstreamer音视频·音视频进阶·gstreamer音视频进阶
H.莓飛15 小时前
【C++】命名空间、缺省参数、函数重载与引用
linux·开发语言·c++·visual studio
91刘仁德15 小时前
IP协议详解:从IP协议头到网段划分、路由与NAT
linux·服务器·网络·网络协议·tcp/ip
辻弋20115 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
硅基手札16 小时前
【Linux内核专栏 14】网络协议栈
linux·运维·网络协议