cat /proc/$PID/status進程狀態

版權聲明:聲明:本文檔可以轉載,須署名原作者。 作者:無爲 qq:490073687 周祥興 [email protected] https://blog.csdn.net/Rookie_CEO/article/details/45033681
[root@DevelopServer ~]# cat /proc/18613/status
Name:   mysqld
State:  S (sleeping)
Tgid:   18613
Pid:    18613
PPid:   1652
TracerPid:      0
Uid:    502     502     502     502
Gid:    502     502     502     502
Utrace: 0
FDSize: 4096
Groups: 502 
VmPeak:  3989884 kB
VmSize:  3596668 kB
VmLck:         0 kB
VmHWM:   1590780 kB
VmRSS:   1058524 kB
VmData:  3556528 kB
VmStk:        88 kB
VmExe:     11796 kB
VmLib:      3904 kB
VmPTE:      5168 kB
VmSwap:  1223904 kB
Threads:        40
SigQ:   0/22892
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000087007
SigIgn: 0000000000001006
SigCgt: 00000001800066e9
CapInh: 0000000000000000
CapPrm: 0000000000000000
CapEff: 0000000000000000
CapBnd: ffffffffffffffff
Cpus_allowed:   7fff
Cpus_allowed_list:      0-14
Mems_allowed:   00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000001
Mems_allowed_list:      0
voluntary_ctxt_switches:        58224
nonvoluntary_ctxt_switches:     166
[root@DevelopServer ~]# 


VmPeak代表當前進程運行過程中佔用內存的峯值.

VmSize代表進程現在正在佔用的內存

VmLck代表進程已經鎖住的物理內存的大小.鎖住的物理內存不能交換到硬盤.

VmHWM是程序得到分配到物理內存的峯值.

VmRSS是程序現在使用的物理內存.

VmData:表示進程數據段的大小.

VmStk:表示進程堆棧段的大小.

VmExe:表示進程代碼的大小.

VmLib:表示進程所使用LIB庫的大小.

VmPTE:佔用的頁表的大小.

VmSwap:進程佔用Swap的大小.

Threads:表示當前進程組的線程數量.

SigPnd:屏蔽位,存儲了該線程的待處理信號,等同於線程的PENDING信號.

ShnPnd:屏蔽位,存儲了該線程組的待處理信號.等同於進程組的PENDING信號.

SigBlk:存放被阻塞的信號,等同於BLOCKED信號.

SigIgn:存放被忽略的信號,等同於IGNORED信號.

SigCgt:存放捕獲的信號,等同於CAUGHT信號.

CapEff:當一個進程要進行某個特權操作時,操作系統會檢查cap_effective的對應位是否有效,而不再是檢查進程的有效UID是否爲0.

CapPrm:表示進程能夠使用的能力,在cap_permitted中可以包含cap_effective中沒有的能力,這些能力是被進程自己臨時放棄的,也可以說cap_effective是cap_permitted的一個子集.

CapInh:表示能夠被當前進程執行的程序繼承的能力.

CapBnd:是系統的邊界能力,我們無法改變它.

Cpus_allowed:3指出該進程可以使用CPU的親和性掩碼,因爲我們指定爲兩塊CPU,所以這裏就是3,如果該進程指定爲4個CPU(如果有話),這裏就是F(1111).

Cpus_allowed_list:0-1指出該進程可以使用CPU的列表,這裏是0-1.

voluntary_ctxt_switches表示進程主動切換的次數.

nonvoluntary_ctxt_switches表示進程被動切換的次數.


==============================================================================


http://www.kerneltravel.net/?p=294

Linux內核之旅
Linux Kernel Travel
首頁>>   2.6內核模塊編程實例   走進內核   電子雜誌   經驗交流   Linux雜談   新手上路   資料下載   討論區   關於我們
« proc文件系統探索 之 以數字命名的目錄[三]
proc文件系統探索 之 proc根目錄下的文件[五] »

10.statm文件
描述進程的內存狀態。

niutao@niutao-desktop:/proc/6950$ cat statm
12992 4432 3213 144 0 1028 0
niutao@niutao-desktop:/proc/6950$

下面我們來詳細解釋該文件中內容的含義。首先我們可以在內核中搜索到該文件的內容是由函數proc_pid_statm()函數寫入的:(/fs/proc/array.c)

int proc_pid_statm(struct task_struct *task, char *buffer)
{
int size = 0, resident = 0, shared = 0, text = 0, lib = 0, data = 0;
struct mm_struct *mm = get_task_mm(task);
if (mm) {
size = task_statm(mm, &shared, &text, &data, &resident);
mmput(mm);
}
return sprintf(buffer, "%d %d %d %d %d %d %d\n",
size, resident, shared, text, lib, data, 0);
}
/*fs/proc/task_mmu.c*/
int task_statm(struct mm_struct *mm, int *shared, int *text,
int *data, int *resident)
{
*shared = get_mm_counter(mm, file_rss);
*text = (PAGE_ALIGN(mm->end_code) - (mm->start_code & PAGE_MASK))
>> PAGE_SHIFT;
*data = mm->total_vm - mm->shared_vm;
*resident = *shared + get_mm_counter(mm, anon_rss);
return mm->total_vm;
}

size表示進程虛擬地址空間的大小(單位爲 頁),resident表示文件映射內存大小和分配給匿名內存映射的大小(單位爲頁),shared表示共享文件內存映射大小(單位爲頁),text表示 可執行代碼區域的內存空間的大小(單位爲頁),所以該進程的內存信息可描述爲其虛擬地址空間的大小爲12992頁(將近60MB),文 件映射內存大小和分配給匿名內存映射的大小爲4432頁(將近18MB).
11.status文件:
用可讀的方式描述進程的狀態

niutao@niutao-desktop:/proc/9744$ cat status
Name: gedit /*進程的程序名*/
State: S (sleeping) /*進程的狀態信息,具體參見http://blog.chinaunix.net/u2/73528/showart_1106510.html*/
Tgid: 9744 /*線程組號*/
Pid: 9744 /*進程pid*/
PPid: 7672 /*父進程的pid*/
TracerPid: 0 /*跟蹤進程的pid*/
Uid: 1000    1000    1000    1000 /*uid euid suid fsuid*/
Gid: 1000    1000    1000    1000 /*gid egid sgid fsgid*/
FDSize: 256 /*文件描述符的最大個數,file->fds*/
Groups: 0 4 20 24 25 29 30 44 46 107 109 115 124 1000 /*啓動該進程的用戶所屬的組的id*/
VmPeak: 60184 kB /*進程地址空間的大小*/
VmSize: 60180 kB /*進程虛擬地址空間的大小reserved_vm:進程在預留或特殊的內存間的物理頁*/
VmLck: 0 kB /*進程已經鎖住的物理內存的大小.鎖住的物理內存不能交換到硬盤*/
VmHWM: 18020 kB /*文件內存映射和匿名內存映射的大小*/
VmRSS: 18020 kB /*應用程序正在使用的物理內存的大小,就是用ps命令的參數rss的值 (rss)*/
VmData: 12240 kB /*程序數據段的大小(所佔虛擬內存的大小),存放初始化了的數據*/
VmStk: 84 kB /*進程在用戶態的棧的大小*/
VmExe: 576 kB /*程序所擁有的可執行虛擬內存的大小,代碼段,不包括任務使用的庫 */
VmLib: 21072 kB /*被映像到任務的虛擬內存空間的庫的大小*/
VmPTE: 56 kB /*該進程的所有頁表的大小*/
Threads: 1 /*共享使用該信號描述符的任務的個數*/
SigQ: 0/8183 /*待處理信號的個數/目前最大可以處理的信號的個數*/
SigPnd: 0000000000000000 /*屏蔽位,存儲了該線程的待處理信號*/
ShdPnd: 0000000000000000 /*屏蔽位,存儲了該線程組的待處理信號*/
SigBlk: 0000000000000000 /*存放被阻塞的信號*/
SigIgn: 0000000000001000 /*存放被忽略的信號*/
SigCgt: 0000000180000000 /*存放被俘獲到的信號*/
CapInh: 0000000000000000 /*能被當前進程執行的程序的繼承的能力*/
CapPrm: 0000000000000000 /*進程能夠使用的能力,可以包含CapEff中沒有的能力,這些能力是被進程自己臨時放棄的*/
CapEff: 0000000000000000 /*是CapPrm的一個子集,進程放棄沒有必要的能力有利於提高安全性*/
Cpus_allowed: 01 /*可以執行該進程的CPU掩碼集*/
Mems_allowed: 1 /**/
voluntary_ctxt_switches: 1241 /*進程主動切換的次數*/
nonvoluntary_ctxt_switches: 717 /*進程被動切換的次數*/

該文件的內容在內核中由proc_pid_status函數寫入:

int proc_pid_status(struct task_struct *task, char *buffer)
{
char *orig = buffer;
struct mm_struct *mm = get_task_mm(task);
buffer = task_name(task, buffer);
buffer = task_state(task, buffer);
if (mm) {
buffer = task_mem(mm, buffer);
mmput(mm);
}
buffer = task_sig(task, buffer);
buffer = task_cap(task, buffer);
buffer = cpuset_task_status_allowed(task, buffer);
#if defined(CONFIG_S390)
buffer = task_show_regs(task, buffer);
#endif
buffer = task_context_switch_counts(task, buffer);
return buffer - orig;
}

經過以上分析,我們知道該進程的程序名爲gedit,目前處 於睡眠狀態,該進程的線程組號爲9744,進程的pid爲9744,父進程的pid爲7672,沒有跟蹤進程。該進程所屬用戶的id爲1000,用戶組 id爲1000,限制該進程最大可以同時打開256個文件。進程的地址空間的大小是60184 kB,進程的虛擬地址空間大小是60180 kB,常駐物理內存的大小爲0KB,文件內存映射和匿名內存映射的大小爲18020 kB,程序正在使用的物理內存的大小18020 kB,程序數據段的大小12240 kB,進程在用戶態的棧的大小84KB,程序所擁有的可執行虛擬內存的大小576KB,被映像到進程的虛擬內存空間的庫的大小21072KB,該進程的 所有頁表的大小56KB,只有一個進程共享使用該進程的信號描述符,沒有帶處理的信號,進程主動切換了1241次,被動切換了717次。
12.mounts文件
該文件包含該系統掛在的文件系統的信息。該文件在/proc下和每個進程文件夾下都有,並且內容一樣。

niutao@niutao-desktop:/proc/1$ cat mounts
rootfs / rootfs rw 0 0
none /sys sysfs rw,nosuid,nodev,noexec 0 0
none /proc proc rw,nosuid,nodev,noexec 0 0
udev /dev tmpfs rw,relatime 0 0
fusectl /sys/fs/fuse/connections fusectl rw,relatime 0 0
/dev/disk/by-uuid/f9f21592-a8a3-4e61-ac3d-0c7b7aa2cd42 / ext3 rw,relatime,errors=remount-ro,data=ordered 0 0
/dev/disk/by-uuid/f9f21592-a8a3-4e61-ac3d-0c7b7aa2cd42
/dev/.static/dev ext3 rw,relatime,errors=remount-ro,data=ordered 0 0
....

該 文件的輸出結果和/etc/mtab文件的內容類似,但比/etc/mtab文件多一些內容。第一列指出被掛載的設備,第二列表示掛載點,第三列指出該文 件系統的類型。第四列對該掛載的文件系統的讀寫權限,一般有ro(read-only )和rw(read-write)。第五列和第六列是虛擬數據,用在/etc/mtab中。
13.io文件

niutao@niutao-desktop:/proc/1$ cat io
rchar: 14699 /*task_struct->rchar*/
wchar: 20553017 /*task_struct->wchar*/
syscr: 350 /*task_struct->syscr*/
syscw: 1128 /*task_struct->syscw,*/
read_bytes: 1605632 /*task_struct->ioac.read_bytes*/
write_bytes: 0 /*task_struct->ioac.write_bytes*/
cancelled_write_bytes: 0 /*task_struct->ioac.cancelled_write_bytes*/

This entry was posted on 星期三, 十一月 12th, 2008 at 10:31 下午 and is filed under Uncategorized. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

--------------------- 
作者:-無-爲- 
來源:CSDN 
原文:https://blog.csdn.net/Rookie_CEO/article/details/45033681 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章