【发布时间】:2010-12-19 03:18:34
【问题描述】:
linux-kernel 如何以及在何处读取显示系统中所有进程的 proc/pid 文件。我找到了 linux-source-2.6.31/fs/proc/ 这里有文件,但是很难理解,因为它真的很复杂。有人可以知道它是如何工作的吗?
【问题讨论】:
标签: ubuntu process linux-kernel system-calls pwd
linux-kernel 如何以及在何处读取显示系统中所有进程的 proc/pid 文件。我找到了 linux-source-2.6.31/fs/proc/ 这里有文件,但是很难理解,因为它真的很复杂。有人可以知道它是如何工作的吗?
【问题讨论】:
标签: ubuntu process linux-kernel system-calls pwd
你找对地方了。
具体来说,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;
}
}
【讨论】:
查看您的 /proc 目录,其中有一个虚拟文件,其中列出了系统中运行的所有进程,甚至二进制程序 ps 实际上在 /proc 目录中打开该文件以输出进程/pids 列表。 .
Linux ProcFs Guide Linux Proc Filesystem as a Programmer's Tool
【讨论】: