7.fd目錄fdinfo目錄
fd目錄包含了所有該進程使用的文件描述符,而fdinfo目錄包含的是對應的fd目錄中進程打開文件的操作權限。
|
我 們可以看出fd目錄中包含的是進程打開文件的鏈接,這裏我們就可以看到我們經常提到的標準輸入(0),標準輸出(1),標準錯誤輸出(2)。那麼 fdinfo中包含的文件的含義,我們可以從這兩個方面探索。一個是內核中的 proc_fd_info函數(/fs/proc/base.c),fdinfo目錄中的文件中的內容正是由這個函數寫的,而flags對應的是文件結 構體(struct file)的f_flags域(知識我呢件的訪問權限)。另一個是我們可以通過查看fd目錄中包含的符號鏈接文件指向的文件的權限得知其(fdinfo目 錄中文件內容)含義:
|
“flags:02″表示文件訪問權限是O_RDWR(可讀可寫),而fd中符號鏈接文件指向的文件/dev/pts/5對用戶的權限也是可讀可寫。
8.root符號鏈接文件
該文件指向的是根目錄(/)。
9.stat文件
該文件的內容反應的是該進程的PCB(task_struct結構)的一些數據域的信息。下面我們來具體看一下它的含義。首先我們在終端上啓動gedit
程 序,然後使用系統監視器(gnome-system-monitor)查看gedit進程的pid爲11942,然後我們讀取它的stat文件
|
在內核中,該文件的內容由do_task_stat函數(fs/proc/array.c)寫。主要操作是:
|
由以上解釋我們可以知道該進程的pid爲11942,可執行程序名爲gedit,當前正處於睡眠狀態,其父進程pid爲7293,按理說應該是一個終端(因爲我們是在終端上啓動gedit的),那麼我們來驗證一下:
|
可 以看到pid等於7293的進程其可執行程序名的確是bash,所以它就是一個終端,並且是11942(gedit)的父進程。我們接着看11942號進 程。其所在線程組id爲11942,會話組id都爲7293,所以如果我們關閉pid爲7293的終端,則11942號進程也會被關閉。它的tty終端下 啓動的,所以終端設備號是一個有效值(如果是雙擊啓動的,那麼該項0,也就是說該程序不是在終端下啓動的)。終端的進程組號爲7293,該進程的 標誌爲4202496,對應十六進制爲0×402000。對於進程的標誌,內核定義在/include/linux/sched.h中,都已PF_開頭 (process flags),0×402000=PF_RANDOMIZE | PF_USED_MATH,表示沒有設置fpu的話,這個進程在使用任何變量之前都需初始化(PF_USED_MATH),並且該進程的虛擬地址空間是不 固定的(PF_RANDOMIZE )。接下來的4個(5017 0 0 0)是該進程的缺頁管理的統計,說明該進程發生了5017次次缺頁(次缺頁:Copy on Write頁和匿名頁)(min_flt),並且其所有子進程沒有發生次缺頁(cmin_flt),沒有發生主缺頁(主缺頁:從映射文件或交換設備 讀入的頁面數)(maj_flt),並且其所有子進程沒有發生住缺頁(cmaj_flt)。該進程在用戶態下運行的時間是80個jiffies(在我的系 統中jiffies等於250,所以80個jiffies爲20秒)(cputime_to_clock_t(utime)),該進程在內核態下運行的時 間是10個jiffies(2.5秒)(cputime_to_clock_t(stime)),該進程的所有子進程在用戶態下運行的時間爲 0(cputime_to_clock_t(cutime)),所有子進程在內核態下運行的時間爲 0(cputime_to_clock_t(cstime))。該進程的動態優先級爲20(priority),靜態優先級爲0(nice)。該進程所在 的線程組裏的線程個數爲1(num_threads)。接下來的一個”0″是直接輸出的,沒有含義。下面的1292037是該進程的的創建時間,說明該進 程的創建時間是開機後大約3.6小時時創建的(start_time=task->real_start_time,start_time/100 /3600=小時)。該進程的虛擬地址空間的大小是61636608B(),該進程當前主流物理內存空間的大小是4481B,能駐留物理地址空間的最大值 爲4294967295B(4GB),在虛擬地址空間的代碼段的起始地址是134512640(0×8048000,一般的應用程序虛擬地址空間的代碼段 的起始地址都是0x80xxxxx,可以使用objdump -d查看),虛擬地址空間的代碼段的結束地址是135099420(0x80D741C),虛擬地址空間的棧的起始地址是 3216990608(0xBFBF6190),堆棧指針的當前值爲3216990068(0xBFBF5F74),可見我的系統的堆棧的擴展方向是向下 擴展(每壓棧一個數,esp向下遞減)。下一條要執行的指令的地址是3085931536(0xB7EF9410)。接下來的7個(0 0 4096 0 0 0 0 )是與信號有關的,內核註釋說在這裏已經沒有作用,這裏就不做解釋。下面一個是進程退出時向父進程發送的信號,該出發送的信號爲SIGCHLD(17)。 下來一個0表示該進程運行在第0個cpu上。該進程的實時程的相對優先級別爲0,該進程是一個非實時進程。