繁体   English   中英

从pid获取真正的应用路径?

[英]Get real path of application from pid?

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

我使用的是Mac OS X.

如果您知道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;
}

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

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

ps xuwww -p PID

PID是您正在寻找的进程ID。有关'ps`命令的更多帮助,您可以找到它

man ps

尝试使用lsof

例:

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

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

如果PID是“用户应用程序”的PID,那么您可以获得应用程序的NSRunningApplication

NSRunningApplication * app = [NSRunningApplication  
    runningApplicationWithProcessIdentifier:pid
];

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

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

应用包本身就在这里

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

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

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

我想在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

使用此代码查找processinfo psn。

然后使用以下函数获取位置,

OSStatus GetProcessBundleLocation (const ProcessSerialNumber *psn, FSRef *location);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM