我知道我可以使用PID
获取进程的ps
,但是如何找到该进程的完整路径?
答案 0 :(得分: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;
}
编译和运行的示例(上面的代码存储在pathfind.c中,32291是我正在尝试查找路径信息的进程的pid):
$ cc pathfind.c -o pathfind
$ ./pathfind 32291
proc 32291: /some/path/your-binary-app
请参阅此博文: http://astojanov.wordpress.com/2011/11/16/mac-os-x-resolve-absolute-path-using-process-pid/
答案 1 :(得分:8)
一种解决方案可以使用:
which `ps -o comm= -p $PID`
其中$ PID是您要检查的流程的pid。在OS X 10.8.2上测试。
答案 2 :(得分:0)
@tomis's answer的更便携,更现代的版本:
command -v "$(ps -o comm= -p $PID)"
command -v
代替了which
,并且更便于携带。
反引号替换为$(cmds)
还有另一种依赖于GNU CoreUtils的realpath
的替代方法:
realpath /proc/$PID/exe
答案 3 :(得分:-6)
试试这个:
sudo ls -l /proc/$(ps -e | grep $PROCESS_NAME | awk '{print $1}')/exe
其中$ PROCESS_NAME是您要检查的流程的名称。