如何以编程方式获取进程的根目录?

时间:2019-02-26 19:18:00

标签: linux process system-calls

在Linux上,每个进程都有其自己的根目录。对于大多数进程,此值为/。但是,chroot可以改变这一点。此信息通过/proc公开。但是,如何以编程方式找到进程的根目录?是否有系统调用或libc函数?

3 个答案:

答案 0 :(得分:1)

我不知道是否还有其他方法,但是许多程序依靠/proc中的机器可读文件来获取有关进程的其他信息,而这并没有本质上的错误。

下面是一个通过/proc以编程方式找到自己的根目录的过程的示例:

#include <stdio.h>
#include <limits.h>
#include <unistd.h>

int main() {
  char foo[PATH_MAX+1];
  int count = readlink("/proc/self/root", foo, PATH_MAX);
  if(count < 0) {
    perror("Can't find root dir (is /proc mounted here?)");
  } else {
    foo[count]=0;
    printf("My root dir is %s\n", foo);
  }
}

答案 1 :(得分:0)

没有。有一个执行此操作的命令是pwdx,这是其代码https://elixir.bootlin.com/busybox/latest/source/procps/pwdx.c。它还从/ proc读取根目录。您可以使用getpid函数获取进程的pid。

答案 2 :(得分:0)

一种简单的方法是使用 for 循环。这是一个单行,将打印出您希望的每个进程的根目录(proc1、proc2、proc3):

<块引用>

for i in $(ps -ef | grep -E 'proc1|proc2|proc3' | awk '{print $2 }');做 ls -ld /proc/$i/root;完成