【问题标题】:How do I get the root directory of a process programmatically?如何以编程方式获取进程的根目录?
【发布时间】:2019-07-20 09:57:48
【问题描述】:

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

【问题讨论】:

    标签: linux process system-calls


    【解决方案1】:

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

    【讨论】:

    • 我非常怀疑链接代码是否符合 euphoria83 的要求,因为它只是读取 /proc/$$/cwd,这是错误的符号链接,问题是关于在不读取 @987654323 的情况下找出当前的 chroot @.
    【解决方案2】:

    我不知道是否还有其他方法,但是很多程序都依赖/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);
      }
    }
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2020-11-11
        • 1970-01-01
        • 1970-01-01
        • 2013-10-25
        • 2011-09-07
        • 2011-09-13
        • 2010-11-10
        • 1970-01-01
        • 2013-04-10
        相关资源
        最近更新 更多