如何在OS X上获取进程的完整路径?

Kra*_*mer 12 macos pid process path ps

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

Alp*_*ale 16

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;
}
Run Code Online (Sandbox Code Playgroud)

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

$ cc pathfind.c -o pathfind
$ ./pathfind 32291
proc 32291: /some/path/your-binary-app
Run Code Online (Sandbox Code Playgroud)

请参阅此博客文章: http ://astojanov.wordpress.com/2011/11/16/mac-os-x-resolve-absolute-path-using-process-pid/


tom*_*mis 6

一种解决方案可以使用哪个:

which `ps -o comm= -p $PID`
Run Code Online (Sandbox Code Playgroud)

其中$ PID是您要检查的流程的pid.在OS X 10.8.2上测试过.

  • 如果您在不同位置具有相同名称的可执行文件,则可能不准确,尤其是在您的路径上不存在的可执行文件."which"在您的PATH env变量中搜索给定的可执行文件,但这可能不一定是在进程列表中显示的那个.@conradk它是'相对'的原因是因为它在你当前的目录中. (7认同)
  • 也在 10.7.5 上进行了测试......很棒。 (2认同)