在不使用系统函数的情况下使用C / C ++获取正在运行的PID的完整路径(Linux)

时间:2012-09-19 23:32:55

标签: c++ c linux process pid

所以我希望能够在不使用命令行上的任何命令的情况下获得正在运行的进程的完整路径(我有进程ID)。任何人对如何做到这一点都有任何想法?

我有PID,是否有任何函数通过传递PID可以返回该进程的完整路径作为char *?

2 个答案:

答案 0 :(得分:6)

使用readlink("/proc/<pid>/exe", buf, bufsize)获取<pid>可执行文件的路径。这适用于Linux,只要procfs可用(通常是)。

使用示例:

int get_exe_for_pid(pid_t pid, char *buf, size_t bufsize) {
    char path[32];
    sprintf(path, "/proc/%d/exe", pid);
    return readlink(path, buf, bufsize);
}

失败时返回-1并设置errno

答案 1 :(得分:0)

man 3 realpath

这会扩展所有符号链接和目录相对令牌。遗憾的是,它是特定于GNU的,我将其与-std=gnu99一起使用,例如printf("%s\n", realpath("/proc/self/exe", NULL))