2014-04-06 70 views
0

我正在尝试执行一个程序,需要捕获正在使用的文件的完整路径(系统中的任何位置) 直接转为示例。 我whichis在获取进程文件的路径

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

目录开了一家名为 “notify.py” 文件。

当我打电话

ps aux 

在Linux的shell,对应于该文件的过程中的工艺路线是

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

不说的是我居然打开了该文件的路径什么! 我想要什么(并且一直在寻找几个小时,无论是使用ps,lsof还是python的psutil)都是获取与该进程相对应的文件的完整路径的一种方式,也就是说,我希望从该进程中,获取上面引用的目录行。

谢谢您的回答

回答

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上工作,但可能会在其他UNIC中失败。这也是为什么例如sshd想要用完整路径调用,因此只需要使用$0(或argv[0]或任何对应于第0个命令行参数的对象)就可以知道二进制文件的确切位置。有没有便携的方式来做到这一点。

+0

便携式是什么意思? – user3264316

+0

顺便说一下,使用我的进程ID运行该命令,我只会得到:'lrwxrwxrwx 1 miguel miguel 0 Apr 6 22:44/proc/11798/exe - >/usr/bin/gedit'不保存路径的文件,但是打开文件的应用程序的路径 – user3264316

+1

看起来像您想要打开文件的路径。如果是这样,你应该在你的问题中澄清它,这是令人困惑的。如果你只需要处理命令路径解析('gedit'在这里),使用'哪个gedit'。 –