我正在尝试做一个需要捕获正在使用的文件的完整路径的程序(系统中的任何地方)直接举个例子。我打开了一个名为"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)是一种获取与该进程对应的文件的完整路径的方法,也就是说,我想从进程中获取上面引用的目录行。
感谢您的回答
您可以尝试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 个命令行参数的内容)知道二进制文件的确切位置就足够了。 没有便携式方法可以做到这一点。