Linux内核如何读取proc/pid文件?

5

Linux内核如何以及在哪里读取proc/pid文件,该文件显示系统中的所有进程。我发现了linux-source-2.6.31/fs/proc/目录下的文件,但是由于非常复杂,很难理解。有人知道它是如何工作的吗?

3个回答

8

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

/proc被用户模式(即非内核)程序使用,比如ps,用于查找关于系统上运行的进程等信息。有一个手册页描述了其中可用的很多内容。


4

你正在寻找正确的地方。

具体来说,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;
    }
}

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接