RLT*_*RLT 20 macos bsd macos-carbon process
如何从流程ID获取流程详细信息,如应用程序名称和应用程序的实际路径?
我使用的是Mac OS X.
Ale*_*nov 28
如果您知道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;
}
Run Code Online (Sandbox Code Playgroud)
小智 19
您可以使用活动监视器 - http://en.wikipedia.org/wiki/Activity_Monitor
或者在终端应用程序中,您可以使用:
ps xuwww -p PID
Run Code Online (Sandbox Code Playgroud)
PID是您正在寻找的进程ID有关'ps`命令的更多帮助,您可以找到它
man ps
Run Code Online (Sandbox Code Playgroud)
尝试使用lsof
例:
lsof -p 1066 -Fn | awk 'NR==2{print}' | sed "s/n\//\//"
输出:
/Users/user/Library/Application Support/Sublime Text 2/Packages
如果 PID 是“用户应用程序”的 PID,那么您可以NSRunningApplication这样获取应用程序的 PID:
NSRunningApplication * app = [NSRunningApplication
runningApplicationWithProcessIdentifier:pid
];
Run Code Online (Sandbox Code Playgroud)
并打印可执行文件的路径:
NSLog(@"Executable of app: %@", app.executableURL.path);
Run Code Online (Sandbox Code Playgroud)
应用程序包本身就在这里
NSLog(@"Executable of app: %@", app.bundleURL.path);
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于系统或后台进程,它仅限于用户应用程序(通常在启动后在扩展坞中可见的应用程序)。该NSRunningApplication对象允许检查应用程序是否是主动的,隐藏/取消隐藏它以及执行所有其他类型的简洁操作。
只是想我在这里提到它是为了完整性。如果您想使用任意进程,那么接受的答案当然更好。