proc/[pid]/maps 文件解释
proc/[pid]/maps 文件解釋
查看進程的虛擬地址空間是如何使用的。
?該文件有6列,分別為:
?地址:庫在進程里地址范圍
權限:虛擬內存的權限,r=讀,w=寫,x=,s=共享,p=私有;
偏移量:庫在進程里地址范圍
設備:映像文件的主設備號和次設備號;
節點:映像文件的節點號;
路徑: 映像文件的路徑
每項都與一個vm_area_struct結構成員對應
范例:
?應用程序的正文段(權限為r-xp)從0×08048000到0×08049000,大小為4096;數據段從0×08049000到
0x0804a000,大小為1KB。該應用程序使用了兩個庫:lib和libc。Libc 的正文段從0×00391000到
0x004b4000,大小為1164KB;數據段從0x004b5000到0x004b8000,大小為12KB.
?Ld 的正文段從00378000到0038d000,大小為84KB;數據段從0x0038e000到0x0038f000,大小為4KB。該應用
程序所使用 的庫所占的虛擬空間的大小從0x4b8000到0×378000,大小為1280KB,其實真正大小為VmLib
(1251KB);因為是按頁分配,每頁 大小為4KB。
?[root@localhost ~]# cat /proc/7114/maps
08047000-080dc000 r-xp 00000000 03:06 884901 /bin/bash
080dc000-080e3000 rwxp 00094000 03:06 884901 /bin/bash
080e3000-08129000 rwxp 080e3000 00:00 0 [heap]
4d575000-4d58a000 r-xp 00000000 03:06 736549 /lib/ld-2.3.4.so
4d58a000-4d58b000 r-xp 00015000 03:06 736549 /lib/ld-2.3.4.so
4d58b000-4d58c000 rwxp 00016000 03:06 736549 /lib/ld-2.3.4.so
4d58e000-4d6b1000 r-xp 00000000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b1000-4d6b2000 r-xp 00123000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b2000-4d6b5000 rwxp 00124000 03:06 736550 /lib/tls/libc-2.3.4.so
4d6b5000-4d6b7000 rwxp 4d6b5000 00:00 0
4d6de000-4d6e0000 r-xp 00000000 03:06 736552 /lib/libdl-2.3.4.so
4d6e0000-4d6e2000 rwxp 00001000 03:06 736552 /lib/libdl-2.3.4.so
4d807000-4d80a000 r-xp 00000000 03:06 736567 /lib/libtermcap.so.2.0.8
4d80a000-4d80b000 rwxp 00002000 03:06 736567 /lib/libtermcap.so.2.0.8
b7bf2000-b7c1e000 r-xp 00000000 03:06 881337 /usr/lib/gconv/GB18030.so
b7c1e000-b7c20000 rwxp 0002b000 03:06 881337 /usr/lib/gconv/GB18030.so
b7c20000-b7c26000 r-xs 00000000 03:06 881502 /usr/lib/gconv/gconv-modules.cache
b7c26000-b7d2f000 r-xp 02197000 03:06 852489 /usr/lib/locale/locale-archive
b7d2f000-b7f2f000 r-xp 00000000 03:06 852489 /usr/lib/locale/locale-archive
b7f2f000-b7f38000 r-xp 00000000 03:06 734450 /lib/libnss_files-2.3.4.so
b7f38000-b7f3a000 rwxp 00008000 03:06 734450 /lib/libnss_files-2.3.4.so
b7f3a000-b7f3c000 rwxp b7f3a000 00:00 0
b7f51000-b7f52000 rwxp b7f51000 00:00 0
bfc3d000-bfc52000 rw-p bfc3d000 00:00 0 [stack]
ffffe000-fffff000 ---p 00000000 00:00 0 [vdso]
[root@localhost ~]#
參數 解釋
address: 0085d000-00872000 虛擬內存區域的起始和終止地址文件所占的地址空間
perms:rw-p 權限:r=read, w=write, x=execute, s=shared, p=private(copy on write)
offset: 00000000 虛擬內存區域在被映射文件中的偏移量
dev: 03:08 文件的主設備號和次設備號
inode: 設備的節點號,0表示沒有節點與內存相對應
name: /lib/ld-2.3.4.so 被映射文件的文件名
各共享庫的代碼段,存放著二進制可執行的機器指令,是由kernel把該庫ELF文件的代碼段map到虛存空間;
各共享庫的數據段,存放著程序執行所需的全局變量,是由kernel把ELF文件的數據段map到虛存空間;
用戶代碼段,存放著二進制形式的可執行的機器指令,是由kernel把ELF文件的代碼段map到虛存空間;
用戶數據段之上是代碼段,存放著程序執行所需的全局變量,是由kernel把ELF文件的數據段map到虛存空間
;
用戶數據段之下是堆(heap),當且僅當malloc調用時存在,是由kernel把匿名內存map到虛存空間,堆則在程
序中沒有調用malloc的情況下不存在;
用戶數據段之下是棧(stack),作為進程的臨時數據區,是由kernel把匿名內存map到虛存空間,棧空間的增
長方向是從高地址到低地址。
?[root@localhost ~]# ldd /bin/bash
linux-gate.so.1 => (0xffffe000)
libtermcap.so.2 => /lib/libtermcap.so.2 (0x4d807000)
libdl.so.2 => /lib/libdl.so.2 (0x4d6de000)
libc.so.6 => /lib/tls/libc.so.6 (0x4d58e000)
/lib/ld-linux.so.2 (0x4d575000)
[root@localhost ~]#
這 個所謂的”linux-gate.so.1″的內容就是內核映射的代碼,系統中其實并不存在這樣一個鏈接庫文件,
它的名字是由ldd自己起的,了 0xffffe400這里的一段代碼,這里就是內核為我們映射的系統調用入口代碼
。Mapped是該應用程序的虛擬空間的大小,這里的值比用top 或ps都大了4KB,就是最后0xffffe400-
0xffffffff的代碼;shared 給出共享的虛擬空間部分。
?
?
/proc/[pid]/status 文件解釋
包含了所有CPU活躍的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。
[root@localhost ~]# cat /proc/self/status
Name: cat
State: R (running)
SleepAVG: 88%
Tgid: 5783
Pid: 5783
PPid: 5742
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmSize: 6588 kB
VmLck: 0 kB
VmRSS: 400 kB
VmData: 144 kB
VmStk: 2040 kB
VmExe: 14 kB
VmLib: 1250 kB
StaBrk: 0804e000 kB
Brk: 088df000 kB
StaStk: bfe03270 kB
ExecLim: 0804c000
Threads: 1
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000000000000
SigCgt: 0000000000000000
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
輸出解釋
Name 應用程序或命令的名字
State 任務的狀態,運行/睡眠/僵死/
SleepAVG 任務的平均等待時間(以nanosecond為單位),交互式任務因為休眠次數多、時間長,它們的
sleep_avg 也會相應地更大一些,所以計算出來的優先級也會相應高一些。
Tgid 線程組號
Pid 任務ID
Ppid 父進程ID
TracerPid 接收跟蹤該進程信息的進程的ID號
Uid Uid euid suid fsuid
Gid Gid egid sgid fsgid
FDSize 文件描述符的最大個數,file->fds
Groups
VmSize(KB) 任務虛擬地址空間的大小 (total_vm-reserved_vm),其中total_vm為進程的地址空間的大小,
reserved_vm:進程在預留或特殊的內存間的物理頁
VmLck(KB) 任務已經鎖住的物理內存的大小。鎖住的物理內存不能交換到硬盤 (locked_vm)
VmRSS(KB) 應用程序正在使用的物理內存的大小,就是用ps命令的參數rss的值 (rss)
VmData(KB) 程序數據段的大小(所占虛擬內存的大小),存放初始化了的數據; (total_vm-shared_vm-
stack_vm)
VmStk(KB) 任務在用戶態的棧的大小 (stack_vm)
VmExe(KB) 程序所擁有的可執行虛擬內存的大小,代碼段,不包括任務使用的庫 (end_code-start_code)
VmLib(KB) 被映像到任務的虛擬內存空間的庫的大小 (exec_lib)
VmPTE 該進程的所有頁表的大小,單位:kb
Threads 共享使用該信號描述符的任務的個數,在POSIX多線程序應用程序中,線程組中的所有線程使用同一
個信號描述符。
SigQ 待處理信號的個數
SigPnd 屏蔽位,存儲了該線程的待處理信號
ShdPnd 屏蔽位,存儲了該線程組的待處理信號
SigBlk 存放被阻塞的信號
SigIgn 存放被忽略的信號
SigCgt 存放被俘獲到的信號
CapInh Inheritable,能被當前進程執行的程序的繼承的能力
CapPrm Permitted,進程能夠使用的能力,可以包含CapEff中沒有的能力,這些能力是被進程自己臨時放棄
的,CapEff是CapPrm的一個子集,進程放棄沒有必要的能力有利于提高安全性
CapEff Effective,進程的有效能力
?
proc/[pid]/stat 文件解釋
[root@localhost ~]# cat /proc/6873/stat
6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0 0 0 0 0 17 0 0 0
[root@localhost ~]#
每個參數意思為:
參數 解釋
pid=6873 進程(包括輕量級進程,即線程)號
comm=a.out 應用程序或命令的名字
task_state=R 任務的狀態,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead
ppid=6723 父進程ID
pgid=6873 線程組號
sid=6723 c該任務所在的會話組ID
tty_nr=34819(pts/3) 該任務的tty終端的設備號,INT(34817/256)=主設備號,(34817-主設備號)=次設備號
tty_pgrp=6873 終端的進程組號,當前運行在該任務所在終端的前臺任務(包括shell 應用程序)的PID。
task->flags=8388608 進程標志位,查看該任務的特性
min_flt=77 該任務不需要從硬盤拷數據而發生的缺頁(次缺頁)的次數
cmin_flt=0 累計的該任務的所有的waited-for進程曾經發生的次缺頁的次數目
maj_flt=0 該任務需要從硬盤拷數據而發生的缺頁(主缺頁)的次數
cmaj_flt=0 累計的該任務的所有的waited-for進程曾經發生的主缺頁的次數目
utime=1587 該任務在用戶態運行的時間,單位為jiffies
stime=1 該任務在核心態運行的時間,單位為jiffies
cutime=0 累計的該任務的所有的waited-for進程曾經在用戶態運行的時間,單位為jiffies
cstime=0 累計的該任務的所有的waited-for進程曾經在核心態運行的時間,單位為jiffies
priority=25 任務的動態優先級
nice=0 任務的靜態優先級
num_threads=3 該任務所在的線程組里線程的個數
it_real_value=0 由于計時間隔導致的下一個 SIGALRM 發送進程的時延,以 jiffy 為單位.
start_time=5882654 該任務啟動的時間,單位為jiffies
vsize=1409024(page) 該任務的虛擬地址空間大小
rss=56(page) 該任務當前駐留物理地址空間的大小
Number of pages the process has in real memory,minu 3 for administrative purpose.
這些頁可能用于代碼,數據和棧。
rlim=4294967295(bytes) 該任務能駐留物理地址空間的最大值
start_code=134512640 該任務在虛擬地址空間的代碼段的起始地址
end_code=134513720 該任務在虛擬地址空間的代碼段的結束地址
start_stack=3215579040 該任務在虛擬地址空間的棧的結束地址
kstkesp=0 esp(32 位堆棧指針) 的當前值, 與在進程的內核堆棧頁得到的一致.
kstkeip=2097798 指向將要執行的指令的指針, EIP(32 位指令指針)的當前值.
pendingsig=0 待處理信號的位圖,記錄發送給進程的普通信號
block_sig=0 阻塞信號的位圖
sigign=0 忽略的信號的位圖
sigcatch=082985 被俘獲的信號的位圖
wchan=0 如果該進程是睡眠狀態,該值給出調度的調用點
nswap 被swapped的頁數,當前沒用
cnswap 所有子進程被swapped的頁數的和,當前沒用
exit_signal=17 該進程結束時,向父進程所發送的信號
task_cpu(task)=0 運行在哪個CPU上
task_rt_priority=0 實時進程的相對優先級別
task_policy=0 進程的調度策略,0=非實時進程,1=FIFO實時進程;2=RR實時進程
?
?
/proc/[pid]/statm
[root@localhost ~]# cat /proc/[pid]/statm
654 57 44 0 0 334 0
輸出解釋
很簡單地返回7組數字,每一個的單位都是一頁 (常見的是4KB)
Size (pages) 任務虛擬地址空間的大小 VmSize/4
Resident(pages) 應用程序正在使用的物理內存的大小 VmRSS/4
Shared(pages) 共享頁數 0
Trs(pages) 程序所擁有的可執行虛擬內存的大小 VmExe/4
Lrs(pages) 被映像到任務的虛擬內存空間的庫的大小 VmLib/4
Drs(pages) 程序數據段和用戶態的棧的大小 (VmData+ VmStk )4
dt(pages) 0
總結
以上是生活随笔為你收集整理的proc/[pid]/maps 文件解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个韩剧好听的女孩名字!
- 下一篇: “夜吸沆瀣精”上一句是什么