24

如何从进程 ID 获取进程详细信息,如应用程序名称和应用程序的实际路径?

我正在使用 Mac OS X。

4

5 回答 5

36

如果您知道 PID,则很容易获得进程名称/位置,只需使用 proc_name 或 proc_pidpath。看看下面的例子,它提供了进程路径:

#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;
}
于 2011-11-16T09:16:24.453 回答
28

您可以使用活动监视器 - http://en.wikipedia.org/wiki/Activity_Monitor

或者在终端应用程序中,您可以使用:

ps xuwww -p PID

PID是您要查找的进程 ID 有关“ps”命令的更多帮助,您可以使用

man ps
于 2011-09-22T08:59:48.427 回答
11

尝试使用 lsof

例子:

lsof -p 1066 -Fn | awk 'NR==2{print}' | sed "s/n\//\//"

输出:
/Users/user/Library/Application Support/Sublime Text 2/Packages

于 2013-05-10T02:53:21.240 回答
3

如果 PID 是“用户应用程序”的 PID,那么您可以NSRunningApplication像这样获取应用程序的 PID:

NSRunningApplication * app = [NSRunningApplication  
    runningApplicationWithProcessIdentifier:pid
];

并打印可执行文件的路径:

NSLog(@"Executable of app: %@", app.executableURL.path);

应用程序包本身在这里

NSLog(@"Executable of app: %@", app.bundleURL.path);

但是,这不适用于系统或后台进程,它仅限于用户应用程序(启动后通常在 Dock 中可见的应用程序)。该NSRunningApplication对象允许检查应用程序是否是 ative,隐藏/取消隐藏它并做所有其他类型的整洁的事情。

只是想我在这里提到它的完整性。如果您想使用任意进程,那么接受的答案当然更好。

于 2015-09-08T14:44:30.173 回答
1

我只想在 bash 中制作一个更好的 ssh-copy-id !!为此,我必须知道 sshd 在哪里才能询问他的实际配置。在某些系统上,我有多个 sshd,这不是我的朋友。在某些 macOS 上,ps 命令也没有显示 sshd 的完整路径。

lsof -p $PPID | grep /sshd | awk '{print $9}'

这个回报

/usr/sbin/sshd

在我可以要求之后

sudo /usr/sbin/sshd -T | grep authorizedkeysfile

这个回报,在某些系统上

authorizedkeysfile .ssh/authorized_keys

所以我必须输入 .ssh/authorized_keys

于 2016-12-28T22:43:16.697 回答