进程_解读/proc/pid/stat

来源:互联网 发布:oracle 云计算 编辑:程序博客网 时间:2024/06/10 13:28

[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

 

Linux是一个多用户,多任务的系统,可以同时运行多个用户的多个程序,就必然会产生很多的进程,而每个进程会有不同的状态。

 

1.R (TASK_RUNNING)状态,可执行状态。

只有在该状态的进程才可能在CPU上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该 CPU上运行。

很多操作系统教科书将正在CPU上执行的进程定义为RUNNING状态、而将可执行但是尚未被调度执行的进程定义为READY状态,这两种状态在linux下统一为 TASK_RUNNING状态。

2.S (TASK_INTERRUPTIBLE)状态,可中断的睡眠状态。

处于这个状态的进程因为等待某某事件的发生(比如等待socket连接、等待信号量),而被挂起。这些进程的task_struct结构被放入对应事件的等待队列中。当这些事件发生时(由外部中断触发、或由其他进程触发),对应的等待队列中的一个或多个进程将被唤醒。

通过ps命令我们会看到,一般情况下,进程列表中的绝大多数进程都处于TASK_INTERRUPTIBLE状态(除非机器的负载很高)。毕竟CPU就这么一两个,进程动辄几十上百个,如果不是绝大多数进程都在睡眠,CPU又怎么响应得过来。

3.D (TASK_UNINTERRUPTIBLE)状态,不可中断的睡眠状态。

与TASK_INTERRUPTIBLE状态类似,进程处于睡眠状态,但是此刻进程是不可中断的。不可中断,指的并不是CPU不响应外部硬件的中断,而是指进程不响应异步信号。
绝大多数情况下,进程处在睡眠状态时,总是应该能够响应异步信号的。否则你将惊奇的发现,kill -9竟然杀不死一个正在睡眠的进程了!于是我们也很好理解,为什么ps命令看到的进程几乎不会出现TASK_UNINTERRU,执行vfork系统调用后,父进程将进入TASK_UNINTERRUPTIBLE状态,直到子进程调用exit或exec

 

ppid=6723                                            父进程ID
pgid=6873                                            线程组号
sid=6723                                              该任务所在的会话组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下的相应信息说明

一、/proc/pid/statm

pid/statm包含了在此进程中所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

 

/proc/1 # cat statm

550 70 62 451 0 97 0

 

输出解释

CPU以及CPU0。。。的每行的每个参数意思(以第一行为例)为:

参数解释 /proc/1/status

Size (pages)= 550  任务虚拟地址空间的大小 VmSize/4

Resident(pages)= 70  应用程序正在使用的物理内存的大小 VmRSS/4

Shared(pages)= 62  共享页数

Trs(pages)= 451  程序所拥有的可执行虚拟内存的大小 VmExe/4

Lrs(pages)= 0  被映像到任务的虚拟内存空间的库的大小 VmLib/4

Drs(pages)= 97  程序数据段和用户态的栈的大小VmData+ VmStk4

dt(pages) 0

 

二、/proc/pid/stat

pid/stat包含了进程所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

/proc/1 # cat stat

1 (linuxrc) S 0 0 0 0 -1 8388864 50 633 20 4 2 357 72 342 16 0 1 0 22 2252800 70 4294967295 32768 1879936 3199270704 3199269552 1113432 0 0 0 674311 3221479524 0 0 0 0 0 0

 

每个参数意思为:

参数解释

pid=1进程(包括轻量级进程,即线程)

comm= linuxrc应用程序或命令的名字

task_state=S任务的状态,R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead

ppid=0父进程ID

pgid=0线程组号

sid=0 c该任务所在的会话组ID

tty_nr=0(pts/3)该任务的tty终端的设备号,INT0/256=主设备号,(0-主设备号)=次设备号

tty_pgrp=-1终端的进程组号,当前运行在该任务所在终端的前台任务(包括shell应用程序)PID

task->flags=8388864进程标志位,查看该任务的特性

min_flt=50该任务不需要从硬盘拷数据而发生的缺页(次缺页)的次数

cmin_flt=633累计的该任务的所有的waited-for进程曾经发生的次缺页的次数目

maj_flt=20该任务需要从硬盘拷数据而发生的缺页(主缺页)的次数

cmaj_flt=4累计的该任务的所有的waited-for进程曾经发生的主缺页的次数目

utime=2该任务在用户态运行的时间,单位为jiffies

stime=357该任务在核心态运行的时间,单位为jiffies

cutime=72累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffies

cstime=342累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffies

priority=16任务的动态优先级

nice=0任务的静态优先级

num_threads=1该任务所在的线程组里线程的个数

it_real_value=0由于计时间隔导致的下一个 SIGALRM发送进程的时延,以 jiffy为单位.

start_time=22该任务启动的时间,单位为jiffies

vsize=2252800bytes该任务的虚拟地址空间大小

rss=70(page)该任务当前驻留物理地址空间的大小

Number of pages the process has in real memory,minu 3 for administrative purpose.

这些页可能用于代码,数据和栈。

rlim=4294967295=0xFFFFFFFFbytes该任务能驻留物理地址空间的最大值

start_code=32768=0x8000 该任务在虚拟地址空间的代码段的起始地址(由连接器决定)

end_code=1879936该任务在虚拟地址空间的代码段的结束地址

start_stack=3199270704=0Xbeb0ff30该任务在虚拟地址空间的栈的开始地址

kstkesp=3199269552  sp(32位堆栈指针)的当前值,与在进程的内核堆栈页得到的一致.

kstkeip=1113432 =0X10FD58指向将要执行的指令的指针, PC(32位指令指针)的当前值.

pendingsig=0待处理信号的位图,记录发送给进程的普通信号

block_sig=0阻塞信号的位图

sigign=0忽略的信号的位图

sigcatch=674311被俘获的信号的位图

wchan=3221479524  如果该进程是睡眠状态,该值给出调度的调用点

nswap=0swapped的页数

cnswap=0所有子进程被swapped的页数的和

exit_signal=0  该进程结束时,向父进程所发送的信号

task_cpu(task)=0运行在哪个CPU

task_rt_priority=0实时进程的相对优先级别

task_policy=0进程的调度策略,0=非实时进程,1=FIFO实时进程;2=RR实时进程 

 

三、/proc/pid/status

包含了所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。

 

/proc/286 # cat status

Name:   mmtest

State:  R (running)

SleepAVG:       0%

Tgid:   286

Pid:    286

PPid:   243

TracerPid:      0

Uid:    0       0       0       0

Gid:    0       0       0       0

FDSize: 32

Groups:

VmPeak:     1464 kB

VmSize:     1464 kB

VmLck:         0 kB

VmHWM:       344 kB

VmRSS:       344 kB

VmData:       20 kB

VmStk:        84 kB

VmExe:         4 kB

VmLib:      1300 kB

VmPTE:         6 kB

Threads:        1

SigQ:   0/256

SigPnd: 0000000000000000

ShdPnd: 0000000000000000

SigBlk: 0000000000000000

SigIgn: 0000000000000000

SigCgt: 0000000000000000

CapInh: 0000000000000000

CapPrm: 00000000fffffeff

CapEff: 00000000fffffeff

 

输出解释

参数解释

Name应用程序或命令的名字

State任务的状态,运行/睡眠/僵死/

SleepAVG任务的平均等待时间(nanosecond为单位),交互式任务因为休眠次数多、时间长,它们的 sleep_avg也会相应地更大一些,所以计算出来的优先级也会相应高一些。

Tgid=286线程组号

Pid=286任务ID

Ppid=243父进程ID

TracerPid=0接收跟踪该进程信息的进程的ID

Uid Uid euid suid fsuid

Gid Gid egid sgid fsgid

FDSize=32文件描述符的最大个数,最多能打开的文件句柄的个数file->fds

Groups

VmPeak: 60184 kB /*进程地址空间的大小*/
VmHWM: 18020 kB /*文件内存映射和匿名内存映射的大小*/

VmSize(KB)=1499136任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页

VmLck(KB)=0任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)

VmRSS(KB)= 344 kB应用程序正在使用的物理内存的大小,就是用ps命令的参数rss的值 (rss)

VmData(KB)=20KB程序数据段的大小(所占虚拟内存的大小),存放初始化了的数据; (total_vm-shared_vm-stack_vm)

VmStk(KB)=84KB任务在用户态的栈的大小 (stack_vm)

VmExe(KB)=4KB程序所拥有的可执行虚拟内存的大小,代码段,不包括任务使用的库 (end_code-start_code)

VmLib(KB)=1300KB被映像到任务的虚拟内存空间的库的大小 (exec_lib)

VmPTE=6KB该进程的所有页表的大小,单位:kb

Threads=1共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。

SigQ待处理信号的个数

SigPnd屏蔽位,存储了该线程的待处理信号

ShdPnd屏蔽位,存储了该线程组的待处理信号

SigBlk存放被阻塞的信号

SigIgn存放被忽略的信号

SigCgt存放被俘获到的信号

CapInh Inheritable,能被当前进程执行的程序的继承的能力

CapPrm Permitted,进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEffCapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性

CapEff Effective,进程的有效能力

 

四、/proc/loadavg

该文件中的所有值都是从系统启动开始累计到当前时刻。该文件只给出了所有CPU的集合信息,不能该出每个CPU的信息。

 

/proc # cat loadavg

1.0  1.00 0.93 2/19 301

 

 

每个值的含义为:

参数解释

lavg_1 (1.0) 1-分钟平均负载

lavg_5 (1.00) 5-分钟平均负载

lavg_15(0.93) 15-分钟平均负载

nr_running (2)在采样时刻,运行队列的任务的数目,与/proc/statprocs_running表示相同意思

nr_threads (19)在采样时刻,系统中活跃的任务的个数(不包括运行已经结束的任务)

last_pid(301)最大的pid值,包括轻量级进程,即线程。

假设当前有两个CPU,则每个CPU的当前任务数为4.61/2=2.31

 

五、/proc/286/smaps

该文件反映了该进程的相应线性区域的大小

/proc/286 # cat smaps

00008000-00009000 r-xp 00000000 00:0c 1695459    /memtest/mmtest

Size:                 4 kB

Rss:                  4 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        4 kB

Private_Dirty:        0 kB

00010000-00011000 rw-p 00000000 00:0c 1695459    /memtest/mmtest

Size:                 4 kB

Rss:                  4 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        0 kB

Private_Dirty:        4 kB

00011000-00012000 rwxp 00011000 00:00 0          [heap]

Size:                 4 kB

Rss:                  0 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        0 kB

Private_Dirty:        0 kB

40000000-40019000 r-xp 00000000 00:0c 2413396    /lib/ld-2.3.2.so

Size:               100 kB

Rss:                 96 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:       96 kB

Private_Dirty:        0 kB

40019000-4001b000 rw-p 40019000 00:00 0

Size:                 8 kB

Rss:                  8 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        0 kB

Private_Dirty:        8 kB

40021000-40022000 rw-p 00019000 00:0c 2413396    /lib/ld-2.3.2.so

Size:                 4 kB

Rss:                  4 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        0 kB

Private_Dirty:        4 kB

40022000-4014e000 r-xp 00000000 00:0c 2413367    /lib/libc-2.3.2.so

Size:              1200 kB

Rss:                200 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:      200 kB

Private_Dirty:        0 kB

4014e000-40152000 ---p 0012c000 00:0c 2413367    /lib/libc-2.3.2.so

Size:                16 kB

Rss:                  0 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        0 kB

Private_Dirty:        0 kB

40152000-4015a000 rw-p 00128000 00:0c 2413367    /lib/libc-2.3.2.so

Size:                32 kB

Rss:                 16 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        0 kB

Private_Dirty:       16 kB

4015a000-4015c000 rw-p 4015a000 00:00 0

Size:                 8 kB

Rss:                  8 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        0 kB

Private_Dirty:        8 kB

be8f1000-be906000 rwxp be8f1000 00:00 0          [stack]

Size:                84 kB

Rss:                  4 kB

Shared_Clean:         0 kB

Shared_Dirty:         0 kB

Private_Clean:        0 kB

Private_Dirty:        4 kB

 

解释说明:

每行数据格式如下:

(内存区域)开始-结束 访问权限  偏移 主设备号:次设备号 i节点  文件。

be8f1000-be906000 rwxp be8f1000 00:00 0          [stack]

Size:相应虚拟地址空间的大小

RSS:正在使用的物理内存的大小

Shared_Clean: 共享区域的未使用页数

Shared_Dirty:  共享区域已经使用的页数

Private_Clean:  私有区域未使用的页数

Private_Dirty: 私有区域已经使用的页数

 

六、/proc/pid/maps

该文件反映了进程占用的内存区域

/proc/286 # cat maps

00008000-00009000 r-xp 00000000 00:0c 1695459    /memtest/mmtest

00010000-00011000 rw-p 00000000 00:0c 1695459    /memtest/mmtest

00011000-00012000 rwxp 00011000 00:00 0          [heap]

40000000-40019000 r-xp 00000000 00:0c 2413396    /lib/ld-2.3.2.so

40019000-4001b000 rw-p 40019000 00:00 0

40021000-40022000 rw-p 00019000 00:0c 2413396    /lib/ld-2.3.2.so

40022000-4014e000 r-xp 00000000 00:0c 2413367    /lib/libc-2.3.2.so

4014e000-40152000 ---p 0012c000 00:0c 2413367    /lib/libc-2.3.2.so

40152000-4015a000 rw-p 00128000 00:0c 2413367    /lib/libc-2.3.2.so

4015a000-4015c000 rw-p 4015a000 00:00 0

be8f1000-be906000 rwxp be8f1000 00:00 0          [stack]

每行数据格式如下:

(内存区域)开始-结束 访问权限  偏移 主设备号:次设备号 i节点  文件。

 

0 0
原创粉丝点击