【问题标题】:How do I get the full path for a process on OS X?如何获取 OS X 上进程的完整路径?
【发布时间】:2013-01-26 04:27:57
【问题描述】:

我知道我可以使用ps 获取进程的PID,但是如何找到该进程的完整路径?

【问题讨论】:

标签: macos process path pid ps


【解决方案1】:

OS X 有 libproc 库,可以用来收集不同的 处理信息。为了找到给定的绝对路径 PID,可以使用以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <libproc.h>

int main (int argc, char* argv[])
{
    pid_t pid; int ret;
    char pathbuf[PROC_PIDPATHINFO_MAXSIZE];

    if ( argc > 1 ) {
        pid = (pid_t) atoi(argv[1]);
        ret = proc_pidpath (pid, pathbuf, sizeof(pathbuf));
        if ( ret <= 0 ) {
            fprintf(stderr, "PID %d: proc_pidpath ();\n", pid);
            fprintf(stderr, "    %s\n", strerror(errno));
        } else {
            printf("proc %d: %s\n", pid, pathbuf);
        }
    }

    return 0;
}

编译和运行示例(以上代码存储在 pathfind.c 中,32291 是我正在尝试为其查找路径信息的进程的 pid):

$ cc pathfind.c -o pathfind
$ ./pathfind 32291
proc 32291: /some/path/your-binary-app

参考这篇博文: http://astojanov.wordpress.com/2011/11/16/mac-os-x-resolve-absolute-path-using-process-pid/

【讨论】:

    【解决方案2】:

    可以使用一种解决方案:

    which `ps -o comm= -p $PID`
    

    $PID 是您要检查的进程的 pid。在 OS X 10.8.2 上测试。

    【讨论】:

    • 也在 10.7.5 上测试过......很棒。
    • 它似乎有时会返回相对路径。这是我所做的测试:$&gt; which `ps -o comm= -p 81233` =&gt; ./ft_minishell2,我的意思是,它不是绝对路径中的完整路径。不知道这是否是问题背后的最初想法。这是小牛队。
    • 如果您在不同位置有一个同名的可执行文件,尤其是不在您的路径上的可执行文件,这可能不准确。 “which”在您的 PATH 环境变量中搜索给定的可执行文件,但这可能不一定是出现在进程列表中的那个。 @conradk 它是“相对”的原因是因为它在您的当前目录中。
    • 无论如何绝对路径结果没有换行符? (用 10.12.6 测试)
    • 似乎在 macOS 11.4 Big Sur 中运行良好!
    【解决方案3】:

    试试这个:

    sudo ls -l /proc/$(ps -e | grep $PROCESS_NAME | awk '{print $1}')/exe
    

    其中 $PROCESS_NAME 是您要检查的进程的名称。

    【讨论】:

    • 您听说过osxfuse - 存储库文件系统包含几个令人兴奋且有用的文件系统的源代码,供您浏览、编译和构建,例如 sshfs、procfs、AccessibilityFS 等.
    • 我听说过(并使用它)但它本身并不存在...许多用户没有安装它。
    【解决方案4】:

    @tomis's answer 的更便携和现代版本:

    command -v "$(ps -o comm= -p $PID)"
    

    command -v 取代了which,更便携。

    反引号替换为$(cmds)

    还有一个依赖于来自 GNU CoreUtils 的realpath 的替代方案:

    realpath /proc/$PID/exe
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      • 2012-05-16
      • 1970-01-01
      • 2017-01-31
      • 2017-03-16
      相关资源
      最近更新 更多