首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >linux-kernel如何读取proc/pid文件?

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

Stack Overflow用户
提问于 2009-11-22 08:33:57
回答 3查看 2.9K关注 0票数 5

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

EN

回答 3

Stack Overflow用户

发布于 2009-11-22 08:44:40

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

ps等用户模式(即非内核)程序使用/proc来查找(例如)系统上运行的进程。有一个man page描述了很多可用的东西。

票数 8
EN

Stack Overflow用户

发布于 2009-11-23 08:13:13

你找对地方了。

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2009-11-22 08:41:51

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1777315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档