2014-04-06 66 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'。 –