【问题标题】:Get path of process file获取进程文件路径
【发布时间】:2014-05-18 23:55:05
【问题描述】:

我正在尝试做一个程序,该程序需要捕获正在使用的文件的完整路径(系统中的任何位置) 直接举个例子。 我在

中打开了一个名为“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)是一种获取与该进程相对应的文件的完整路径的方法,也就是说,我希望从进程中到获取上面引用的目录行。

感谢您的回答

【问题讨论】:

    标签: python linux shell operating-system


    【解决方案1】:

    您可以尝试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 个命令行参数的内容)知道二进制文件的确切位置。没有便携的方法可以做到这一点。

    【讨论】:

    • 便携是什么意思?
    • 顺便说一句,使用我的进程 ID 运行该命令,我只得到:lrwxrwxrwx 1 miguel miguel 0 Apr 6 22:44 /proc/11798/exe -> /usr/bin/gedit 它不包含文件的路径,而是打开文件的应用程序的路径跨度>
    • 看起来你想要进程打开的文件的路径。如果是这样,你应该在你的问题中澄清它,这是令人困惑的。如果您只需要解析进程命令路径(此处为gedit),请使用which gedit
    • 如果查找由进程 1234打开的文件,请查看 /proc/1234/fd/
    • 我与之前的演讲者一致:请澄清您的问题。如果您想了解特定进程打开的所有文件,请查看/proc/$$/fd。如果某些东西仅适用于 you 正在使用的平台(我想这将是 Linux 上的 Python)或任何其他类似系统(有一个名为 @ 987654332@,定义了“通常”的 UNIX 系统,例如 FreeBSD、Solaris、HP/UX、AIX ……应该支持什么)。 The /proc/$$/* 方法很可能适用于所有这些。
    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    相关资源
    最近更新 更多