所以我希望能够在不使用命令行上的任何命令的情况下获取正在运行的进程的完整路径(我有进程ID)。有人对如何做到这一点有任何想法吗?
我确实有 PID,是否有任何函数可以通过传递 PID 将该进程的完整路径作为字符 * 返回?
使用 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
。
man 3 realpath
这将扩展所有符号链接和目录相对令牌。可悲的是,它是GNU特定的,我将其与-std=gnu99
一起使用,就像printf("%sn", realpath("/proc/self/exe", NULL))
一样。