获取进程文件路径
我正在尝试做一个程序,需要获取系统中正在使用的文件的完整路径。
直接给个例子。
我打开了一个名为 "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]
,或者其他对应于第一个命令行参数的东西)就能知道这个程序的确切位置。没有一种通用的方法可以做到这一点。