Linux内核如何以及在哪里读取proc/pid文件,该文件显示系统中的所有进程。我发现了linux-source-2.6.31/fs/proc/目录下的文件,但是由于非常复杂,很难理解。有人知道它是如何工作的吗?
Linux内核如何以及在哪里读取proc/pid文件,该文件显示系统中的所有进程。我发现了linux-source-2.6.31/fs/proc/目录下的文件,但是由于非常复杂,很难理解。有人知道它是如何工作的吗?
你正在寻找正确的地方。
具体来说,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目录中的该文件来输出进程/进程ID列表。