获取进程文件路径

0 投票
1 回答
1034 浏览
提问于 2025-04-18 01:38

我正在尝试做一个程序,需要获取系统中正在使用的文件的完整路径。

直接给个例子。

我打开了一个名为 "notify.py" 的文件,它在

/home/miguel/Dropbox/prog/python/notify/ 

这个目录下。

当我在 Linux 的命令行中调用

ps aux

时,和这个文件相关的进程行是

miguel   11798  0.7  0.4 512320 34176 pts/2    Sl   22:41   0:06 gedit notify.py

但这并没有显示我实际打开的文件的路径!

我想要的(而且我已经找了好几个小时,不管是用 ps、lsof 还是 Python 的 psutil)是找到与这个进程对应的文件的完整路径,也就是说,我想从这个进程中获取上面提到的目录行。

谢谢大家的回答。

1 个回答

2

你可以试着用 readlink(2) 来读取文件 /proc/<pid>/exe,这应该正是你想要的内容:

$ ls -l /proc/$$/exe
lrwxrwxrwx 1 aw aw 0 Apr  7 00:02 /proc/11700/exe -> /bin/zsh
$

不过要注意,这个方法并不是特别通用。它在Linux和至少FreeBSD上应该能用,但在其他一些UNIX系统上可能就不行了。这也是为什么像 sshd 这样的程序希望用完整路径来调用,这样只需要获取 $0(或者 argv[0],或者其他对应于第一个命令行参数的东西)就能知道这个程序的确切位置。没有一种通用的方法可以做到这一点。

撰写回答