通過pid獲取程序路徑

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?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章