http://blog.csdn.net/kevinx_xu/article/details/8178746  /proc 详解

内核线程分析报告

进程层次

[root@109-com1 scripts]# ps -ef|grep udevd
root       431     1  0 Aug28 ?        00:00:00 /sbin/udevd -d
root      1199   431  0 Aug28 ?        00:00:00 /sbin/udevd -d
root     19382   431  0 Aug30 ?        00:00:00 /sbin/udevd -d
[root@109-com1 scripts]# ps -ef|grep 1161
root      1161     1  0 Aug28 ?        00:00:03 /usr/libexec/postfix/master
postfix   1176  1161  0 Aug28 ?        00:00:01 qmgr -l -t fifo -u
postfix  30258  1161  0 13:35 ?        00:00:00 pickup -l -t fifo -u

root      1383     1  0 Aug28 ?        00:00:02 /usr/sbin/sshd
root     29538  1383  0 Sep03 ?        00:00:01 sshd: root@pts/2
root     29540 29538  0 Sep03 pts/2    00:00:00 -bash
root      2088 29540  0 14:08 pts/2    00:00:00 ps -ef

rpcuser  29223     1  0 Sep03 ?        00:00:00 rpc.statd --no-notify
rpc      29426     1  0 Sep03 ?        00:00:00 rpcbind
rpcuser  29433     1  0 Sep03 ?        00:00:00 rpc.statd --no-notify

[root@221-comecs tmp]# pstree -p
        ├─safe_asterisk(3732)───asterisk(3735)─┬─{asterisk}(3737)
        │                                      ├─{asterisk}(3738)
        │                                      ├─{asterisk}(3739)
        │                                      ├─{asterisk}(3740)
        │                                      ├─{asterisk}(3741)
        │                                      ├─{asterisk}(3742)
        │                                      ├─{asterisk}(3743)
[root@221-comecs tmp]# ps -Lf 3735  进程共启动了n个线程
UID        PID  PPID   LWP  C NLWP STIME TTY      STAT   TIME CMD
root      3735  3732  3735  0   61 Oct09 ?        Sl     0:00 /usr/sbin/asterisk -f -vvvg -c
root      3735  3732  3737  0   61 Oct09 ?        Sl     0:00 /usr/sbin/asterisk -f -vvvg -c
root      3735  3732  3738  0   61 Oct09 ?        Sl     0:00 /usr/sbin/asterisk -f -vvvg -c
root      3735  3732  3739  0   61 Oct09 ?        Sl     0:08 /usr/sbin/asterisk -f -vvvg -c

/proc/stat    总
/proc/loadavg
/proc/sched_debug
/proc/schedstat 总

/proc/pid/schedstat 分
/proc/pid/sched
/proc/pid/stack
/proc/pid/stat    分
/proc/pid/statm
/proc/pid/status
/proc/pid/maps
/proc/pid/smaps

/proc/loadavg文件
[root@-com1 ]# cat ../loadavg
/
[root@-com1 ]# grep run /proc/stat
procs_running 

每个值的含义为:
参数 解释
lavg_1 (-分钟平均负载
lavg_5 (-分钟平均负载
lavg_15(-分钟平均负载
nr_running () 在采样时刻,运行队列的任务的数目,与/proc/stat的procs_running表示相同意思
nr_threads () 在采样时刻,系统中活跃的任务的个数(不包括运行已经结束的任务)
last_pid() 最大的pid值,包括轻量级进程,即线程。
假设当前有两个CPU,则每个CPU的当前任务数为4./=2.31

/proc/pid/smaps文件
该文件反映了该进程的相应线性区域的大小
解释说明:
每行数据格式如下:
(内存区域)开始-结束 访问权限  偏移 主设备号:次设备号 i节点  文件。
be8f1000-be906000 rwxp be8f1000 :           [stack]
Size:相应虚拟地址空间的大小
RSS: 正在使用的物理内存的大小
Shared_Clean:  共享区域的未使用页数
Shared_Dirty:   共享区域已经使用的页数
Private_Clean:   私有区域未使用的页数
Private_Dirty:  私有区域已经使用的页数

/proc/pid/maps文件,上面的smaps的更为详细,maps为列表
该文件反映了进程占用的内存区域
每行数据格式如下:
(内存区域)开始-结束 访问权限  偏移 主设备号:次设备号 i节点  文件。
/proc/pid/statm包含了在此进程中所有CPU活跃的信息,该文件中的所有值都是从系统启动开始累计到当前时刻。
top命令中看到的VIRT

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 root          2332m 184m  S : asterisk
  root          2826m  36m  S  :34.83 FLTService

在/proc/pid/statm中看到的

[root@-com1 ]# cat statm

每列含义解释:
2826m*/=723692  top中的PID为6939的VIRT字段2826m
Size (pages)=   任务虚拟地址空间的大小 VmSize/
36m*/=9315    top中的PID为6939的RES字段36m
Resident(pages)=   应用程序正在使用的物理内存的大小 VmRSS/
/=1479      top中的PID为6939的SHR字段5916
Shared(pages)=   共享页数

status文件中的VmExe:        kB行    /=
Trs(pages)=   程序所拥有的可执行虚拟内存的大小 VmExe/
status文件中的VmLib:      kB行    有问题的
Lrs(pages)=   被映像到任务的虚拟内存空间的库的大小 VmLib/

status文件中的下两行即2771312+/=
VmData:   kB
VmStk:         kB
Drs(pages)=   程序数据段和用户态的栈的大小 (VmData+VmStk)/

dt(pages) 

此文件字段较多
/proc/pid/stat参数解释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:deadppid=0 父进程IDpgid=0 线程组号sid=0 c该任务所在的会话组IDtty_nr=0(pts/3) 该任务的tty终端的设备号,INT(0/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 该任务在用户态运行的时间,单位为jiffiesstime=357 该任务在核心态运行的时间,单位为jiffiescutime=72 累计的该任务的所有的waited-for进程曾经在用户态运行的时间,单位为jiffiescstime=342 累计的该任务的所有的waited-for进程曾经在核心态运行的时间,单位为jiffiespriority=16 任务的动态优先级nice=0 任务的静态优先级num_threads=1 该任务所在的线程组里线程的个数it_real_value=0 由于计时间隔导致的下一个 SIGALRM 发送进程的时延,以 jiffy 为单位.start_time=22 该任务启动的时间,单位为jiffiesvsize=2252800(bytes) 该任务的虚拟地址空间大小rss=70(page) 该任务当前驻留物理地址空间的大小Number of pages the process has in real memory,minu 3 for administrative purpose.这些页可能用于代码,数据和栈。rlim=4294967295=0xFFFFFFFF(bytes) 该任务能驻留物理地址空间的最大值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=0 被swapped的页数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

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:
VmPeak:  kB /*进程地址空间的大小*/
VmHWM:  kB /*文件内存映射和匿名内存映射的大小*/
VmSize(KB)= 任务虚拟地址空间的大小 (total_vm-reserved_vm),其中total_vm为进程的地址空间的大小,reserved_vm:进程在预留或特殊的内存间的物理页
VmLck(KB)= 任务已经锁住的物理内存的大小。锁住的物理内存不能交换到硬盘 (locked_vm)
VmRSS(KB)=  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= 共享使用该信号描述符的任务的个数,在POSIX多线程序应用程序中,线程组中的所有线程使用同一个信号描述符。
SigQ 待处理信号的个数
SigPnd 屏蔽位,存储了该线程的待处理信号
ShdPnd 屏蔽位,存储了该线程组的待处理信号
SigBlk 存放被阻塞的信号
SigIgn 存放被忽略的信号
SigCgt 存放被俘获到的信号
CapInh Inheritable,能被当前进程执行的程序的继承的能力
CapPrm Permitted,进程能够使用的能力,可以包含CapEff中没有的能力,这些能力是被进程自己临时放弃的,CapEff是CapPrm的一个子集,进程放弃没有必要的能力有利于提高安全性
CapEff Effective,进程的有效能力

Linux下进程信息的深入分析
这里我们主要介绍进程的状态,进程的状态可以通过/proc/PID/status来查看,也可以通过/proc/PID/stat来查看.
如果说到工具大家用的最多的ps也可以看到进程的信息.这里我们通过/proc/PID/status来分析进程的信息.
在2.6.18之后的内核,多了capibilty/cpusets等信息.
[root@localhost 1499]# ps -He
[root@localhost 1499]# cd /proc/1499/
[root@localhost 1499]# more status
State: S (sleeping)
解释:进程的状态我们前文已经做了很详细的分析,各进程的状态代表的意义如下:
R (running)", "S (sleeping)", "D (disk sleep)", "T (stopped)", "T(tracing stop)", "Z (zombie)", or "X (dead)"
Tgid: 1499
解释:Tgid是线程组的ID,一个线程一定属于一个线程组(进程组).
Pid: 987
解释:这个是进程的ID,更准确的说应该是线程的ID.
注:/proc/pid/status中的Pid就是ps命令的LWP列输出,PID一列其实是进程组,而LWP是轻量级进程,也就是线程,因为所有的进程必须一个线程,那就是它自己.
FDSize: 32
解释:
FDSize是当前分配的文件描述符,这个值不是当前进程使用文件描述符的上限.
我们看到这里是32,但实际并没有分配32个文件,如下:
我们看到这里只用到了18个文件描述符.而如果超过32个文件描述符,将以32进行递增,如果是64位系统,将以64进行递增.
FDSize这个值不会减少,如果我们程序打开了300个文件,并不会因为关闭文件,而减少FDSize这个值.

voluntary_ctxt_switches: 1
nonvoluntary_ctxt_switches: 0
voluntary_ctxt_switches表示进程主动切换的次数.
nonvoluntary_ctxt_switches表示进程被动切换的次数.
首先查看一下当前进程,如下:
echo $$
1544
执行如下命令:
while ((1)); do echo 1; sleep 1; done
查看该进程的主动切换与被动切换,如下:
cat status

voluntary_ctxt_switches: 949
nonvoluntary_ctxt_switches: 55
我们看到主动切换和被动切换有了明显的变化.

查看进程打开的文件

lsof -c bash  查看进程所打开的文件
bash    2036  ff1  255u   CHR  136,0      0t0      3 /dev/pts/0
bash    2059 root  cwd    DIR  253,0     4096 391887 /home/ff1/Desktop
bash    2083 root  cwd    DIR    0,3        0  12786 /proc/1481
bash    2083 root  rtd    DIR  253,0     4096      2 /

lsof -p 2083  查看pid所打开的文件
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    2083 root  cwd    DIR    0,3        0  12786 /proc/1481
bash    2083 root  rtd    DIR  253,0     4096      2 /
bash    2083 root  txt    REG  253,0   938832 130612 /bin/bash
bash    2083 root  mem    REG  253,0   156928 392183 /lib64/ld-2.12.so

[root@localhost bin]# ps -ef|grep ssh  查看进程pid
root      1481     1  0 05:07 ?        00:00:00 /usr/sbin/sshd
root      2079  1481  0 05:15 ?        00:00:00 sshd: root@pts/1
root      2155  2083  0 05:53 pts/1    00:00:00 grep ssh
[root@localhost bin]# lsof /usr/sbin/sshd  查看打开文件对应的进程
COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
sshd    1481 root txt    REG  253,0   546680 675770 /usr/sbin/sshd
sshd    2079 root txt    REG  253,0   546680 675770 /usr/sbin/sshd

lsof -p 2079

sshd    2079 root    0u   CHR                1,3      0t0   3968 /dev/null
sshd    2079 root    1u   CHR                1,3      0t0   3968 /dev/null
sshd    2079 root    2u   CHR                1,3      0t0   3968 /dev/null
sshd    2079 root    3r  IPv4              19029      0t0    TCP 192.168.2.131:ssh->192.168.2.191:51500 (ESTABLISHED)
sshd    2079 root    4w  unix 0xffff88001f408680      0t0  19100 socket
sshd    2079 root    5u  FIFO                0,8      0t0  19103 pipe
sshd    2079 root    6w  FIFO                0,8      0t0  19103 pipe
sshd    2079 root    7u   CHR                5,2      0t0   5672 /dev/ptmx
sshd    2079 root    9u   CHR                5,2      0t0   5672 /dev/ptmx
sshd    2079 root   10u   CHR                5,2      0t0   5672 /dev/ptmx
[root@localhost fd]# cd /proc/2079/fd
[root@localhost fd]# ll
总用量 0
lrwx------. 1 root root 64 2月  27 05:15 0 -> /dev/null
lrwx------. 1 root root 64 2月  27 05:15 1 -> /dev/null
lrwx------. 1 root root 64 2月  27 05:50 10 -> /dev/ptmx
lrwx------. 1 root root 64 2月  27 05:15 2 -> /dev/null
lr-x------. 1 root root 64 2月  27 05:15 3 -> socket:[19029]
l-wx------. 1 root root 64 2月  27 05:15 4 -> socket:[19100]
lrwx------. 1 root root 64 2月  27 05:15 5 -> pipe:[19103]
l-wx------. 1 root root 64 2月  27 05:50 6 -> pipe:[19103]
lrwx------. 1 root root 64 2月  27 05:50 7 -> /dev/ptmx
lrwx------. 1 root root 64 2月  27 05:50 9 -> /dev/ptmx

[root@localhost bin]# lsof /bin/bash
COMMAND  PID USER  FD   TYPE DEVICE SIZE/OFF   NODE NAME
bash    2036  ff1 txt    REG  253,0   938832 130612 /bin/bash
bash    2059 root txt    REG  253,0   938832 130612 /bin/bash
bash    2083 root txt    REG  253,0   938832 130612 /bin/bash

进程与其线程信息采20次,每秒一次。
[root@-comecs ]# pidstat -p  -t   > /root/

[root@-comecs ]# pstree -U
init─┬─auditd───{auditd}
     ├─crond
     ├─master─┬─pickup
     │        └─qmgr
     ├─*[mingetty]
     ├─rpc.statd
     ├─rpcbind
     ├─rsyslogd───*[{rsyslogd}]
     ├─safe_asterisk───asterisk───*[{asterisk}]
     ├─snmpd
     ├─sshd───sshd───bash───pstree
     ├─udevd───*[udevd]
     └─vmtoolsd───{vmtoolsd}
[root@-comecs ]# pstree -A
init-+-auditd---{auditd}
     |-crond
     |-master-+-pickup
     |        `-qmgr
     |-*[mingetty]
     |-rpc.statd
     |-rpcbind
     |-rsyslogd---*[{rsyslogd}]
     |-safe_asterisk---asterisk---*[{asterisk}]
     |-snmpd
     |-sshd---sshd---bash---pstree
     |-udevd---*[udevd]
     `-vmtoolsd---{vmtoolsd}
[root@-comecs ]# pstree -G
initqwqauditdqqq{auditd}
     tqcrond
     tqmasterqwqpickup
     x        mqqmgr
     tq6*[mingetty]
     tqrpc.statd
     tqrpcbind
     tqrsyslogdqqq3*[{rsyslogd}]
     tqsafe_asteriskqqqasteriskqqq62*[{asterisk}]
     tqsnmpd
     tqsshdqqqsshdqqqbashqqqpstree
     tqudevdqqq2*[udevd]
     mqvmtoolsdqqq{vmtoolsd}

进程的层次关系,先内核态,再用户态,都是守护进程形式的
[root@-comecs ]# ps -efH
UID        PID  PPID  C STIME TTY          TIME CMD
root                   ?        :: [kthreadd]
root                   ?        ::   [migration/]
root                   ?        ::   [ksoftirqd/]
root                   ?        ::   [migration/]
root                   ?        ::   [watchdog/]
root                   ?        ::   [migration/]
root                   ?        ::   [migration/]
root                   ?        ::   [ksoftirqd/]
root                  ?        ::   [watchdog/]
root                  ?        ::   [migration/]
root                  ?        ::   [migration/]
root                  ?        ::   [ksoftirqd/]
root                  ?        ::   [watchdog/]
root                  ?        ::   [migration/]
root                  ?        ::   [migration/]
root                  ?        ::   [ksoftirqd/]
root                  ?        ::   [watchdog/]
root                  ?        ::   [events/]
root                  ?        ::   [events/]
root                  ?        ::   [events/]
root                  ?        ::   [events/]
root                  ?        ::   [cgroup]
root                  ?        ::   [khelper]
root                  ?        ::   [netns]
root                  ?        ::   [async/mgr]
root                  ?        ::   [pm]
root                  ?        ::   [sync_supers]
root                  ?        ::   [bdi-default]
root                  ?        ::   [kintegrityd/]
root                  ?        ::   [kintegrityd/]
root                  ?        ::   [kintegrityd/]
root                  ?        ::   [kintegrityd/]
root                  ?        ::   [kblockd/]
root                  ?        ::   [kblockd/]
root                  ?        ::   [kblockd/]
root                  ?        ::   [kblockd/]
root                  ?        ::   [kacpid]
root                  ?        ::   [kacpi_notify]
root                  ?        ::   [kacpi_hotplug]
root                  ?        ::   [ata_aux]
root                  ?        ::   [ata_sff/]
root                  ?        ::   [ata_sff/]
root                  ?        ::   [ata_sff/]
root                  ?        ::   [ata_sff/]
root                  ?        ::   [ksuspend_usbd]
root                  ?        ::   [khubd]
root                  ?        ::   [kseriod]
root                  ?        ::   [md/]
root                  ?        ::   [md/]
root                  ?        ::   [md/]
root                  ?        ::   [md/]
root                  ?        ::   [md_misc/]
root                  ?        ::   [md_misc/]
root                  ?        ::   [md_misc/]
root                  ?        ::   [md_misc/]
root                  ?        ::   [linkwatch]
root                  ?        ::   [khungtaskd]
root                  ?        ::   [kswapd0]
root                  ?        ::   [ksmd]
root                  ?        ::   [khugepaged]
root                  ?        ::   [aio/]
root                  ?        ::   [aio/]
root                  ?        ::   [aio/]
root                  ?        ::   [aio/]
root                  ?        ::   [crypto/]
root                  ?        ::   [crypto/]
root                  ?        ::   [crypto/]
root                  ?        ::   [crypto/]
root                  ?        ::   [kthrotld/]
root                  ?        ::   [kthrotld/]
root                  ?        ::   [kthrotld/]
root                  ?        ::   [kthrotld/]
root                  ?        ::   [pciehpd]
root                  ?        ::   [kpsmoused]
root                  ?        ::   [usbhid_resumer]
root                 ?        ::   [kstriped]
root                 ?        ::   [mpt_poll_0]
root                 ?        ::   [mpt/]
root                 ?        ::   [scsi_eh_0]
root                 ?        ::   [scsi_eh_1]
root                 ?        ::   [scsi_eh_2]
root                 ?        ::   [kdmflush]
root                 ?        ::   [kdmflush]
root                 ?        ::   [jbd2/dm--]
root                 ?        ::   [ext4-dio-unwrit]
root                 ?        ::   [vmmemctl]
root                 ?        ::   [jbd2/sda1-]
root                 ?        ::   [ext4-dio-unwrit]
root                 ?        ::   [kauditd]
root                ?        ::   [flush-:]
root                ?        ::   [rpciod/]
root                ?        ::   [rpciod/]
root                ?        ::   [rpciod/]
root                ?        ::   [rpciod/]
root                ?        ::   [kslowd000]
root                ?        ::   [kslowd001]
root                ?        ::   [nfsiod]
root                ?        ::   [lockd]
root               ?        ::   [bluetooth]
root                   ?        :: /sbin/init
root                 ?        ::   /sbin/udevd -d
root              ?        ::     /sbin/udevd -d
root             ?        ::     /sbin/udevd -d
root                ?        ::   /usr/sbin/vmtoolsd
root                ?        ::   auditd
root                ?        ::   /sbin/rsyslogd -i /var/run/syslogd.pid -c
rpc                 ?        ::   rpcbind
rpcuser             ?        ::   rpc.statd
root                ?        ::   /usr/sbin/sshd
root          : ?        ::     sshd: root@pts/
root         : pts/    ::       -bash
root         : pts/    ::         ps -efH
root                ?        ::   /usr/libexec/postfix/master
postfix          ?        ::     qmgr -l -t fifo -u
postfix       : ?        ::     pickup -l -t fifo -u
root                tty2     ::   /sbin/mingetty /dev/tty2
root                tty3     ::   /sbin/mingetty /dev/tty3
root                tty4     ::   /sbin/mingetty /dev/tty4
root                tty5     ::   /sbin/mingetty /dev/tty5
root                tty6     ::   /sbin/mingetty /dev/tty6
root                tty1     ::   /sbin/mingetty /dev/tty1
root               ?        ::   crond
root               ?        ::   /usr/sbin/snmpd -LS0-6d -Lf /dev/null -p /var/run/snmpd.pid
root             Feb13 ?        ::   /bin/sh /usr/sbin/safe_asterisk
root         Feb13 ?        ::     /usr/sbin/asterisk -f -vvvg -c
[root@-comecs ]#

[root@-comecs ]# ps --help
********* simple selection *********  ********* selection by list *********
-A all processes                      -C by command name
-N negate selection                   -G by real group ID (supports names)
-a all w/ tty except session leaders  -U by real user ID (supports names)
-d all except session leaders         -g by session OR by effective group name
-e all processes                      -p by process ID
T  all processes on this terminal     -s processes in the sessions given
a  all w/ tty, including other users  -t by tty
g  OBSOLETE -- DO NOT USE             -u by effective user ID (supports names)
r  only running processes             U  processes for specified users
x  processes w/o controlling ttys     t  by tty
*********** output format **********  *********** long options ***********
-o,o user-defined  -f full            --Group --User --pid --cols --ppid
-j,j job control   s  signal          --group --user --sid --rows --info
-O,O preloaded -o  v  virtual memory  --cumulative --format --deselect
-l,l long          u  user-oriented   --sort --tty --forest --version
-F   extra full    X  registers       --heading --no-heading --context
                    ********* misc options *********
-V,V  show version      L  list format codes  f  ASCII art forest
-m,m,-L,-T,H  threads   S  children in sum    -y change -l format
-M,Z  security data     c  true command name  -c scheduling class
-w,w  wide output       n  numeric WCHAN,UID  -H process hierarchy

[root@-comecs ]#
  PID TTY          TIME CMD
 ?        :: asterisk
[root@-comecs ]#
UID        PID  PPID  C STIME TTY          TIME CMD
root         Feb13 ?        :: /usr/sbin/asterisk -f -vvvg -c
[root@-comecs ]#
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root             Feb13 ?        :: /usr/sbin/asterisk -f -vvvg -c
[root@-comecs ]# ps -efH

[root@-comecs ]#  -m
UID        PID  PPID  C STIME TTY          TIME CMD
root                ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
root         -     -     -        :: -
root         -     -     -        :: -
root         -     -     -        :: -
root         -     -     -        :: -
[root@-comecs ]#  -L
UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
root                      ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                      ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                      ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                      ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
[root@-comecs ]#  -T
UID        PID  SPID  PPID  C STIME TTY          TIME CMD
root                  ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                  ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                  ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                  ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
[root@-comecs ]#  H
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root                ?        Sl     : /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                ?        Sl     : /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                ?        Sl     : /sbin/rsyslogd -i /var/run/syslogd.pid -c
root                ?        Sl     : /sbin/rsyslogd -i /var/run/syslogd.pid -c
[root@-comecs ]#  m
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
root                ?        -      : /sbin/rsyslogd -i /var/run/syslogd.pid -c
root         -     -     -        Sl     : -
root         -     -     -        Sl     : -
root         -     -     -        Sl     : -
root         -     -     -        Sl     : -
[root@-comecs ]#  -m
UID        PID  PPID  C STIME TTY          TIME CMD
root                ?        :: /sbin/rsyslogd -i /var/run/syslogd.pid -c
root         -     -     -        :: -
root         -     -     -        :: -
root         -     -     -        :: -
root         -     -     -        :: -

pid>fd>inode
11061>178>3252673

stat filename

ls -i filename

df -i

dumpe2fs

上面四个命令都可以查看相关的inode号

fd>pid>inode
[root@test1 fd]# asterisk -rx "com show online_trms"|grep 178
178 10004729 100080 014729415450 陕D01059:2 024:21:08 00:00:17 3 223.104.11.106 9925 70540 0 0 0
[root@test1 fd]# ss -np|grep 10000|grep 178
ESTAB 0 0 172.16.1.21:10000 223.104.11.106:9925 users:(("asterisk",11061,178))
[root@test1 fd]# cd /proc/11061/fd
[root@test1 fd]# ll|grep 178
lrwx------ 1 root root 64 Aug 18 15:58 178 -> socket:[3252673]
[root@test1 fd]# less /proc/net/tcp|grep 3252673
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
310: 150110AC:2710 6A0B68DF:26C5 01 00000000:00000000 02:0008C84D 00000000 0 0 3252673 2 ffff81010e346d00 2147 40 12 2 2

16进制转10进制的ip地址
150110AC:2710
150110AC=172.16.1.21 2710=10000
6A0B68DF:26C5
6A0B68DF=223.104.11.106 26C5=9925

那么这个socket:后面的一串数字是什么呢?其实是该socket的inode号。从linux内核代码net/socket.c 中可以看出,如下
/*
* sockfs_dname() is called from d_path().
*/
static char *sockfs_dname(struct dentry *dentry, char *buffer, int buflen)
{
return dynamic_dname(dentry, buffer, buflen, "socket:[%lu]",
dentry->d_inode->i_ino);
}

那么,知道了某个进程打开的socket的inode号后,我们可以做什么呢?这就涉及到/proc/net/tcp(udp对应/proc/net/udp)文件了,其中也列出了相应socket的inode号通过比对此字段,我们能在/proc/net/tcp下获得此套接口的其他信息,如对应的<本地地址:端口号,远端地址:端口号>对,窗口大小,状态等信息。具体字段含义详见net/ipv4/tcp_ipv4.c 中的 tcp4_seq_show 函数。cat /proc/net/tcp 如下:
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
19: 0100007F:83B8 0100007F:A57D 01 00000000:00000000 00:00000000 00000000 0 0 10879 1 f622edc0 20 4 31 3 -1
20: 0100007F:0FA0 0100007F:AA06 01 00000000:00000000 00:00000000 00000000 0 0 7326842 1 f5504dc0 20 4 11 5 -1

深入分析Linux内核源码-第五章进程调度

http://www.chinaunix.net/old_jh/6/32963.html

http://hi.baidu.com/_kouu/item/7111e61acd04a9f487ad4ed0  linux进程状态浅析

http://hi.baidu.com/_kouu/item/38c81042455c97d2c1a592d9  linux进程调度浅析

linux概念之进程分析的更多相关文章

  1. linux概念之内存分析

    linux内存总结 分析样本[root@-comecs ~]# free total used free shared buffers cached Mem: -/+ buffers/cache: S ...

  2. linux概念之cpu分析

    http://ilinuxkernel.com/?cat=4 Linux CPU占用率原理与精确度分析1  CPU占用率计算原理在Linux/Unix 下,CPU 利用率分为用户态.系统态和空闲态,分 ...

  3. Linux下java进程CPU占用率高分析方法

    Linux下java进程CPU占用率高分析方法 在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况.这种情况发生时,我们怎么去找出原因并解决. 一般解决方法是通过top命令找出消耗资源 ...

  4. [转载]Linux 线程实现机制分析

    本文转自http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/ 支持原创.尊重原创,分享知识! 自从多线程编程的概念出现在 Linux ...

  5. Linux 线程与进程,以及通信

    http://blog.chinaunix.net/uid-25324849-id-3110075.html 部分转自:http://blog.chinaunix.net/uid-20620288-i ...

  6. 24小时学通Linux内核之进程

    都说这个主题不错,连我自己都觉得有点过大了,不过我想我还是得坚持下去,努力在有限的时间里学习到Linux内核的奥秘,也希望大家多指点,让我更有进步.今天讲的全是进程,这点在大二的时候就困惑了我,结果那 ...

  7. Linux内核源代码情景分析系列

    http://blog.sina.com.cn/s/blog_6b94d5680101vfqv.html Linux内核源代码情景分析---第五章 文件系统  5.1 概述 构成一个操作系统最重要的就 ...

  8. Android/Linux下CGroup框架分析及其使用

    1 cgroup介绍 CGroup是control group的简称,它为Linux kernel提供一种任务聚集和划分的机制,可以限制.记录.隔离进程组(process groups)所使用的资源( ...

  9. 20169212《Linux内核原理与分析》课程总结

    20169212<Linux内核原理与分析>课程总结 每周作业链接汇总 第一周作业:完成linux基础入门实验,了解一些基础的命令操作. 第二周作业:学习MOOC课程--计算机是如何工作的 ...

随机推荐

  1. 如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites]

    如何在ASP.NET Web站点中统一页面布局[Creating a Consistent Layout in ASP.NET Web Pages(Razor) Sites] 一.布局页面介绍[Abo ...

  2. AppSettings从数据库读取

    /// <summary> /// 提供对配置信息的访问 /// </summary> public static class AppSettings { /// <su ...

  3. 转载:Spring AOP (上)

    工 作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大说过:“开发人员不可能一天到晚只有工作,肯定是需要自我学习.第一:为了更充实自己,保 持进步状态.第二:为了提升技术,提高开发能力.第三 ...

  4. HDU 3695 Computer Virus on Planet Pandora(AC自动机模版题)

    Computer Virus on Planet Pandora Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 256000/1280 ...

  5. Win7常规快捷键

    Win7常规快捷键: Win+1:打开/显示超级任务栏第一个图标代表的程序 Win+2:打开/显示超级任务栏第二个图标代表的程序(3.4.--如此类推) Win+D:切换桌面显示窗口或者gadgets ...

  6. CentOS 7 防火墙和端口配置

    centos 7 防火墙和端口配置--解决 RHEL 7/ CentOS 7/Fedora 出现Unit iptables.service failed to load # 第一步,关闭firewal ...

  7. sql 入门经典(第五版) Ryan Stephens 学习笔记  第四部分:建立复杂的数据库查询/

    第十三章: 在查询表里结合表 1.等值结合 : // 选择 tabla_a 和table_b 中id相等的行,输出 他们的id 和name select table_a.id , table_a.na ...

  8. Day10

    会议讨论 628:今天是冲刺的最后一天了,好紧张好激动,我们组还有好些个功能没实现呢,感觉崩崩哒!还要实现选择不同的专业导入不同的课表呢. 601:在修改教师帐号信息的页面要有当密码格式.用户名格式等 ...

  9. andriod 新建Activity_ Form

    在一个Android工程,如何新建一个Activity? 一:新建一个类(*.class),继承自android.app.Activity类. 二:在res/layout目录下新建一个布局xml文件, ...

  10. BZOJ4000 [TJOI2015]棋盘

    首先是状态压缩DP... 然后我们发现转移都是一样的...可以矩阵优化... 于是做完啦QAQQQ 题目读不懂?恩多读几遍就读懂了,诶诶诶!别打我呀! /*********************** ...