Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 从pid获取应用程序的实际路径?_Macos_Process_Macos Carbon_Bsd - Fatal编程技术网

Macos 从pid获取应用程序的实际路径?

Macos 从pid获取应用程序的实际路径?,macos,process,macos-carbon,bsd,Macos,Process,Macos Carbon,Bsd,如何从进程id获取进程详细信息,如应用程序名称和应用程序的实际路径 我正在使用Mac OS X。您可以使用活动监视器- 或者在终端应用程序中,您可以使用: ps xuwww -p PID PID是您要查找的进程id 有关“ps”命令的更多帮助,请使用 man ps 如果知道PID,很容易获得进程名称/位置,只需使用proc_名称或proc_pidpath即可。请看以下示例,其中提供了流程路径: #include <stdio.h> #include <stdlib.h>

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


我正在使用Mac OS X。

您可以使用活动监视器-

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

ps xuwww -p PID
PID
是您要查找的进程id 有关“ps”命令的更多帮助,请使用

man ps

如果知道PID,很容易获得进程名称/位置,只需使用proc_名称或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;
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
pid_t pid;int-ret;
char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
如果(argc>1){
pid=(pid_t)atoi(argv[1]);
ret=proc_pidpath(pid,pathbuf,sizeof(pathbuf));
如果(ret尝试使用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
对象允许检查应用程序是否可用,隐藏/取消隐藏应用程序,以及执行所有其他类型的操作


我想我在这里提到它是为了完整性。如果你想处理任意进程,那么公认的答案当然更好。

我只想在bash中创建一个更好的ssh副本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

我不理解你的评论。你能详细说明一下吗?可能是的重复吗?我不认为它是重复的。这里不同的应用程序要求基于pid的路径。不是重复的,因为OS X没有/proc,只有Linux有。的可能重复。它包括获取进程pid和d然后调用
proc_pidpath
.URL访问阿伦的博客:这对我来说非常有效,谢谢阿伦!令人惊讶的是,在网上找到这些信息是多么困难---所有Linux负责人都坚持认为/proc应该有效。:-)关于proc_pidpath函数的注意事项:缓冲区大小必须为proc_PIDPATHINFO_MAXSIZE。如果指定较小的大小,调用将失败,即使维度足以容纳完整的路径。这是否因为未返回应用程序名称而被否决?
ps[PID]
在我刚刚需要它的时候为我工作-我不得不从路径中推断出应用程序的名称,无可否认。@Qix它可以通过使用
进程
(又称
NSTask
),将其启动路径设置为
/bin/bash
,参数设置为
[“-c”,“ps xuwww-p\(pid)”]
,及其
标准输出
管道
您control@BenLeggiero这是糟糕的软件工程实践,应该不惜一切代价避免。@Qix我同意!这就是为什么我没有给出答案;)不在Mac OS 10.12.1上工作。这是
lsof-p 22558-Fn | awk'NR==5{print}sed“s/n\/\/”