5

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

4

3 回答 3

8

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

/proc 由用户模式(即非内核)程序使用,例如ps查找(例如)系统上运行的进程。有一个手册页描述了许多可用的内容。

于 2009-11-22T00:44:40.283 回答
3

你找对地方了。

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

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;
    }
}
于 2009-11-23T00:13:12.640 回答
1

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

Linux ProcFs 指南 Linux Proc 文件系统作为程序员的工具

于 2009-11-22T00:41:50.723 回答