【问题标题】:How does linux-kernel read proc/pid file?linux-kernel 如何读取 proc/pid 文件?
【发布时间】:2010-12-19 03:18:34
【问题描述】:

linux-kernel 如何以及在何处读取显示系统中所有进程的 proc/pid 文件。我找到了 linux-source-2.6.31/fs/proc/ 这里有文件,但是很难理解,因为它真的很复杂。有人可以知道它是如何工作的吗?

【问题讨论】:

    标签: ubuntu process linux-kernel system-calls pwd


    【解决方案1】:

    /proc 是一个伪文件系统,这意味着它的内容不是“真实”文件。相反,内容是内核内部数据结构的表示。因此内核不需要读取它们——它已经可以直接访问数据了。

    /proc 被ps 之类的用户模式(即非内核)程序用于查找(例如)系统上运行的进程。有一个 man page 描述了大部分可用的内容。

    【讨论】:

      【解决方案2】:

      你找对地方了。

      具体来说,fs/proc/base.c中的函数proc_pid_readdir()用于在读取/proc根目录时填写pid条目列表。您可以在该函数中看到围绕所有进程和任务的基本循环:

      ns = filp->f_dentry->d_sb->s_fs_info;
      iter.task = NULL;
      iter.tgid = filp->f_pos - TGID_OFFSET;
      for (iter = next_tgid(ns, iter);
           iter.task;
           iter.tgid += 1, iter = next_tgid(ns, iter)) {
          filp->f_pos = iter.tgid + TGID_OFFSET;
          if (proc_pid_fill_cache(filp, dirent, filldir, iter) < 0) {
              put_task_struct(iter.task);
              goto out;
          }
      }
      

      【讨论】:

        【解决方案3】:

        查看您的 /proc 目录,其中有一个虚拟文件,其中列出了系统中运行的所有进程,甚至二进制程序 ps 实际上在 /proc 目录中打开该文件以输出进程/pids 列表。 .

        Linux ProcFs Guide Linux Proc Filesystem as a Programmer's Tool

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-20
          • 2019-03-13
          • 1970-01-01
          • 2014-02-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-24
          相关资源
          最近更新 更多