linux-kernel如何读取proc / pid文件?

时间:2009-11-22 00:33:57

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

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

3 个答案:

答案 0 :(得分:8)

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

用户模式(即非内核)程序(如ps)使用

/ proc来查找(例如)有关系统上运行的进程的信息。有一个man page描述了可用的大部分内容。

答案 1 :(得分:3)

你正在寻找合适的地方。

具体来说,proc_pid_readdir()中的函数fs/proc/base.c用于在读取/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;
    }
}

答案 2 :(得分:1)

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

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