通过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)

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

相关推荐
nxb55610 小时前
haproxy算法,ip透传,自定义haproxy错误页面
运维·服务器
Nebula嵌入式11 小时前
【C语言】09-深入解析main函数
linux·c语言·开发语言·嵌入式
Dxy123931021612 小时前
Linux 编译安装 Python 3.12.10(多版本共存,不破坏系统Python)
linux·运维·python
黑桃小柒713 小时前
小,最终显示为TCP WINDOW FULL,TCP ZeroWindow。 仔细分析了下LWIP源码,还以为是内存管理出了问题,跟 ...
网络·网络协议·tcp/ip
xz驱动分享13 小时前
Linux DMA 子系统学习笔记
linux·dma·rk3588·嵌入式软件
w678200714 小时前
Prisma不能优雅的支持DTO,试试Vona ORM吧
linux·运维·ubuntu
网络研究院14 小时前
LastPass 发布紧急安全预警:针对主密码的活跃网络钓鱼攻击正在进行中
网络·安全·黑客·攻击·漏洞·风险·钓鱼
Darkwanderor14 小时前
Linux系统编程实战项目:模拟实现shell
linux·c++
便利店102415 小时前
TCP 为什么有时故意跑不快?拥塞控制与滑动窗口一次讲清
服务器·网络协议·tcp·拥塞控制
向夏威夷 梦断明暄16 小时前
【高效管理token成本】OpenClaw精细化分库管理memory以减少token成本的方案的可行性研究
网络