Linux中可以通过/proc
目录获取pid
对应的程序路径,例如要获取9527的路径可以执行如下的命令
ls -l /proc/9527/
Mac中则可以通过如下的方法获取程序路径。
1. lsof命令
lsof -p 1066 -Fn | awk 'NR==2{print}' | sed "s/n\//\//"
2. 通过如下的代码获取[1]
#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;
}
编译命令和执行方式如下
$ gcc proc.cpp -o proc
$ ./proc pid
3. ps 命令
ps xuwww -p PID
但是这种方式只可以查看命令行的参数,但是不能找到可执行程序的路径[test][3]
参考文献
1. Mac OS X: Resolve absolute path using process’ PID
2. Get real path of application from pid?