1. 程式人生 > >/proc檔案系統(二):/proc/<pid>/stat

/proc檔案系統(二):/proc/<pid>/stat

0. 前言

/proc 檔案系統是一個偽檔案系統,它只存在記憶體當中,而不佔用外存空間。

  • 它以檔案系統的方式為核心與程序提供通訊的介面。使用者和應用程式可以通過/proc得到系統的資訊,並可以改變核心的某些引數。
  • 由於系統的資訊,如程序,是動態改變的,所以使用者或應用程式讀取/proc目錄中的檔案時,proc檔案系統是動態從系統核心讀出所需資訊並提交的。
[email protected]:/proc# ll /proc/
dr-xr-xr-x  9 root             root                           0 11月 28 20:09 <pid>/
......
dr-xr-xr-x  2 root             root                           0 11月 30 16:53 acpi/
dr-xr-xr-x  5 root             root                           0 11月 30 16:53 asound/
-r--r--r--  1 root             root                           0 11月 30 16:53 buddyinfo
dr-xr-xr-x  4 root             root                           0 11月 30 16:53 bus/
-r--r--r--  1 root             root                           0 11月 30 16:53 cgroups
-r--r--r--  1 root             root                           0 11月 30 16:53 cmdline
-r--r--r--  1 root             root                           0 11月 30 16:53 consoles
-r--r--r--  1 root             root                           0 11月 30 16:53 cpuinfo
-r--r--r--  1 root             root                           0 11月 30 16:53 crypto
-r--r--r--  1 root             root                           0 11月 30 16:53 devices
-r--r--r--  1 root             root                           0 11月 30 16:53 diskstats
-r--r--r--  1 root             root                           0 11月 30 16:53 dma
dr-xr-xr-x  2 root             root                           0 11月 30 16:53 driver/
-r--r--r--  1 root             root                           0 11月 30 16:53 execdomains
-r--r--r--  1 root             root                           0 11月 30 16:53 fb
-r--r--r--  1 root             root                           0 11月 30 16:53 filesystems
dr-xr-xr-x  5 root             root                           0 11月 30 16:53 fs/
-r--r--r--  1 root             root                           0 11月 30 16:53 interrupts
-r--r--r--  1 root             root                           0 11月 30 16:53 iomem
-r--r--r--  1 root             root                           0 11月 30 16:53 ioports
dr-xr-xr-x 57 root             root                           0 11月 30 16:53 irq/
-r--r--r--  1 root             root                           0 11月 30 16:53 kallsyms
-r--------  1 root             root             140737477881856 11月 30 16:53 kcore
-r--r--r--  1 root             root                           0 11月 30 16:53 keys
-r--r--r--  1 root             root                           0 11月 30 16:53 key-users
-r--------  1 root             root                           0 11月 16 14:27 kmsg
-r--------  1 root             root                           0 11月 30 16:53 kpagecgroup
-r--------  1 root             root                           0 11月 30 16:53 kpagecount
-r--------  1 root             root                           0 11月 30 16:53 kpageflags
-r--r--r--  1 root             root                           0 11月 30 16:53 loadavg
-r--r--r--  1 root             root                           0 11月 30 16:53 locks
-r--r--r--  1 root             root                           0 11月 30 16:53 mdstat
-r--r--r--  1 root             root                           0 11月 30 16:53 meminfo
-r--r--r--  1 root             root                           0 11月 30 16:53 misc
-r--r--r--  1 root             root                           0 11月 30 16:53 modules
lrwxrwxrwx  1 root             root                          11 11月 30 16:53 mounts -> self/mounts
dr-xr-xr-x  3 root             root                           0 11月 30 16:53 mpt/
-rw-r--r--  1 root             root                           0 11月 30 16:53 mtrr
lrwxrwxrwx  1 root             root                           8 11月 30 16:53 net -> self/net/
-r--r--r--  1 root             root                           0 11月 30 16:53 pagetypeinfo
-r--r--r--  1 root             root                           0 11月 30 16:53 partitions
-r--r--r--  1 root             root                           0 11月 30 16:53 sched_debug
-r--r--r--  1 root             root                           0 11月 30 16:53 schedstat
dr-xr-xr-x  4 root             root                           0 11月 30 16:53 scsi/
lrwxrwxrwx  1 root             root                           0 11月 16 14:27 self -> 107692/
-r--------  1 root             root                           0 11月 30 16:53 slabinfo
-r--r--r--  1 root             root                           0 11月 30 16:53 softirqs
-r--r--r--  1 root             root                           0 11月 30 16:53 stat
-r--r--r--  1 root             root                           0 11月 16 14:27 swaps
dr-xr-xr-x  1 root             root                           0 11月 16 14:27 sys/
--w-------  1 root             root                           0 11月 30 16:53 sysrq-trigger
dr-xr-xr-x  2 root             root                           0 11月 30 16:53 sysvipc/
lrwxrwxrwx  1 root             root                           0 11月 16 14:27 thread-self -> 107692/task/107692/
-r--r--r--  1 root             root                           0 11月 30 16:53 timer_list
-rw-r--r--  1 root             root                           0 11月 30 16:53 timer_stats
dr-xr-xr-x  4 root             root                           0 11月 30 16:53 tty/
-r--r--r--  1 root             root                           0 11月 30 16:53 uptime
-r--r--r--  1 root             root                           0 11月 30 16:53 version
-r--r--r--  1 root             root                           0 11月 30 16:53 version_signature
-r--------  1 root             root                           0 11月 30 16:53 vmallocinfo
-r--r--r--  1 root             root                           0 11月 30 16:53 vmstat
-r--r--r--  1 root             root                           0 11月 30 16:53 zoneinfo

1. /proc/cpuinfo

/proc檔案系統(一):cpuinfo

2. /proc/<pid> 整體

/proc目錄中有一些以數字命名的目錄,它們是程序目錄。

  • 系統中當前執行的每一個程序在/proc下都對應一個以程序號為目錄名的目錄/proc/pid,它們是讀取程序資訊的介面。
  • 在Linux 2.6.0-test6以上的版本中/proc/pid目錄中有一個task目錄,/proc/pid/task目錄中也有一些以該程序所擁有的執行緒的執行緒號命名的目錄/proc/pid/task/tid,它們是讀取執行緒資訊的介面。

pid_list

[email protected]:/proc/219# ll
dr-xr-xr-x    8 root     root             0 Nov 30 14:49 .
dr-xr-xr-x 1031 root     root             0 Jan  1  1970 ..
dr-xr-xr-x    2 root     root             0 Nov 30 14:52 attr
-r--------    1 root     root             0 Nov 30 14:49 auxv
-r--r--r--    1 root     root             0 Nov 30 14:49 cmdline
-rw-r--r--    1 root     root             0 Nov 30 14:52 comm
-rw-r--r--    1 root     root             0 Nov 30 14:52 coredump_filter
lrwxrwxrwx    1 root     root             0 Nov 30 14:52 cwd -> /usr/bvrobot
-r--------    1 root     root             0 Nov 30 14:52 environ
lrwxrwxrwx    1 root     root             0 Nov 30 14:49 exe -> /usr/bvrobot/bvrobot
dr-x------    2 root     root             0 Nov 30 14:52 fd
dr-x------    2 root     root             0 Nov 30 14:52 fdinfo
-r--r--r--    1 root     root             0 Nov 30 14:52 limits
-rw-r--r--    1 root     root             0 Nov 30 14:52 loginuid
-r--r--r--    1 root     root             0 Nov 30 14:52 maps
-rw-------    1 root     root             0 Nov 30 14:52 mem
-r--r--r--    1 root     root             0 Nov 30 14:52 mountinfo
-r--r--r--    1 root     root             0 Nov 30 14:52 mounts
-r--------    1 root     root             0 Nov 30 14:52 mountstats
dr-xr-xr-x    4 root     root             0 Nov 30 14:52 net
dr-x--x--x    2 root     root             0 Nov 30 14:52 ns
-rw-r--r--    1 root     root             0 Nov 30 14:52 oom_adj
-r--r--r--    1 root     root             0 Nov 30 14:52 oom_score
-rw-r--r--    1 root     root             0 Nov 30 14:52 oom_score_adj
-r--r--r--    1 root     root             0 Nov 30 14:52 personality
lrwxrwxrwx    1 root     root             0 Nov 30 14:52 root -> /
-r--r--r--    1 root     root             0 Nov 30 14:52 sessionid
-r--r--r--    1 root     root             0 Nov 30 14:52 stack
-r--r--r--    1 root     root             0 Nov 30 14:49 stat
-r--r--r--    1 root     root             0 Nov 30 14:52 statm
-r--r--r--    1 root     root             0 Nov 30 14:52 status
dr-xr-xr-x   13 root     root             0 Nov 30 14:52 task
-r--r--r--    1 root     root             0 Nov 30 14:52 wchan

2.1 /proc/<pid>/stat

[email protected]:/proc/3782# cat stat
3782 (bvrobot) S 114 3782 114 64512 4072 1077936384 8727 14959 0 0 37 524 0 1 20 0 11 0 71083 45535232 8490 4294967295 65536 1285064 3201052128 3201049428 3069071928 0 0 4096 67137026 4294967295 0 0 17 2 0 0 0 0 0 1353712 1360302 4616192
引數 數值 解釋
pid 3782 程序(包括輕量級程序,即執行緒)號
comm bvrobot 應用程式或命令的名字
task_state S 任務的狀態:
R:runnign, S:sleeping (TASK_INTERRUPTIBLE),
T: stopped, Z:zombie, D:dead
ppid 114 父程序ID
pgid 3782 程序組號
sid 114 該任務所在的會話組ID
tty_nr 64512(pts/6) 該任務的tty終端的裝置號
tty_pgrp 4072 終端的程序組號,當前執行在該任務所在終端的前臺任務(包括shell 應用程式)的PID。
task->flags 1077936384 程序標誌位,檢視該任務的特性
min_flt 8727 該任務不需要從硬碟拷資料而發生的缺頁(次缺頁)的次數
cmin_flt 14959 累計的該任務的所有的waited-for程序曾經發生的次缺頁的次數目
maj_flt 0 該任務需要從硬碟拷資料而發生的缺頁(主缺頁)的次數
cmaj_flt 0 累計的該任務的所有的waited-for程序曾經發生的主缺頁的次數目
utime 37 該任務在使用者態執行的時間,單位為jiffies
stime 524 該任務在核心態執行的時間,單位為jiffies
cutime 0 累計的該任務的所有的waited-for程序曾經在使用者態執行的時間,單位為jiffies
cstime 1 累計的該任務的所有的waited-for程序曾經在核心態執行的時間,單位為jiffies
priority 20 任務的動態優先順序
nice 0 任務的靜態優先順序
num_threads 11 該任務所在的執行緒組裡執行緒的個數
it_real_value 0 由於計時間隔導致的下一個 SIGALRM 傳送程序的時延,以 jiffy 為單位.
start_time 71038 該任務啟動的時間,單位為jiffies
vsize 45535232 該任務的虛擬地址空間大小
rss 8490 該任務當前駐留實體地址空間的大小;。
rlim 4294967295 該任務能駐留實體地址空間的最大值
start_code 65536 該任務在虛擬地址空間的程式碼段的起始地址
end_code 1285064 該任務在虛擬地址空間的程式碼段的結束地址
start_stack 3201052128 該任務在虛擬地址空間的棧的結束地址
kstkesp 3201049428 esp(32 位堆疊指標) 的當前值, 與在程序的核心堆疊頁得到的一致.
kstkeip 3069071928 指向將要執行的指令的指標, EIP(32 位指令指標)的當前值.
pendingsig 0 待處理訊號的點陣圖,記錄傳送給程序的普通訊號
block_sig 0 阻塞訊號的點陣圖
sigign 4096 忽略的訊號的點陣圖
sigcatch 67137026 被俘獲的訊號的點陣圖
wchan 4294967295 如果該程序是睡眠狀態,該值給出排程的呼叫點
nswap 0 被swapped的頁數,當前沒用
cnswap 0 所有子程序被swapped的頁數的和,當前沒用
exit_signal 17 該程序結束時,向父程序所傳送的訊號
task_cpu(task) 2 執行在哪個CPU上
task_rt_priority 0 實時程序的相對優先級別
task_policy 0 程序的排程策略,0:非實時程序,1:FIFO實時程序;2:RR實時程序
blio_ticks 0 等待阻塞IO的時間
gtime 1353712 guest time of the task in jiffies
cgtime 1360302 guest time of the task children in jiffies
start_data 4616192 address above which program data+bss is placed
end_data address below which program data+bss is placed
start_brk address above which program heap can be expanded with br
arg_start address above which program command line is placed
arg_end address below which program command line is placed
env_start address above which program environment is placed
env_end address below which program environment is placed
exit_code the thread's exit_code in the form reported by the waitpid system call