2009-11-22 25 views
5

linux-kernel如何和在哪裏讀取顯示系統中所有進程的proc/pid文件。我發現linux-source-2.6.31/fs/proc /這裏有文件,但很難理解,因爲它非常複雜。有人可以知道,它是如何工作的?linux-kernel如何讀取proc/pid文件?

回答

8

的/ proc是一個僞文件系統,這意味着它的內容不是 「真正」 的文件。相反,內容是內核內部數據結構的表示。因此內核不需要閱讀他們 - 它可以直接訪問數據。

/proc被用戶模式(即非內核)程序使用,例如ps以查找(例如)關於在系統上運行的進程。有一個man page,它描述了很多可用的東西。

3

您正在找正確的地方。

具體而言,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; 
    } 
}