我正在尝试执行一个需要捕获正在使用的文件的完整路径的程序(系统中的任何位置) 直截了当的一个例子。 我在
中打开了一个名为“notify.py”的文件/home/miguel/Dropbox/prog/python/notify/
。目录
当我打电话
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)是一种获取与该进程相对应的文件的完整路径的方法,也就是说,我希望从进程到获取上面引用的目录行。
感谢您的回答
答案 0 :(得分: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个命令行参数对应的任何内容)知道确切的位置二进制。没有可移植的方法来做到这一点。