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. 1.1 Linux中的进程 --fork、孤儿进程、僵尸进程、文件共享分析

    操作系统经典的三态如下: 1.就绪态 2.等待(阻塞) 3.运行态 其转换状态如下图所示: 操作系统内核中会维护多个队列,将不同状态的进程加入到不同的队列中,其中撤销是进程运行结束后,由内核收回. 以 ...

  5. [linux] C语言Linux系统编程进程基本概念

    1.如果说文件是unix系统最重要的抽象概念,那么进程仅次于文件.进程是执行中的目标代码:活动的.生存的.运行的程序. 除了目标代码进程还包含数据.资源.状态以及虚拟化的计算机. 2.进程体系: 每一 ...

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

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

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

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

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

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

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

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

随机推荐

  1. 【原创】Kafka Consumer多线程实例

    Kafka 0.9版本开始推出了Java版本的consumer,优化了coordinator的设计以及摆脱了对zookeeper的依赖.社区最近也在探讨正式用这套consumer API替换Scala ...

  2. Tips For Your Maya Plugin Development

    (The reason why I write English blog is that I'm trying to improve my written English. The Chinese v ...

  3. 值类型,引用类型,栈,堆,ref,out

    在网上收集... C#的值类型,引用类型,栈,堆,ref,out C# 的类型系统可分为两种类型,一是值类型,一是引用类型,这个每个C#程序员都了解.还有托管堆,栈,ref,out等等概念也是每个C# ...

  4. Vs 2013 单步调试 .net framework 中遇到的问题

    为了可以看清.net framework 的的内部机制,进行单步实际是不错的选择啊,   其它的更多设置可以看其它文章,我这里主要讲问题.     然后就会加载PDB,然后就可以单步进入了. 但是 , ...

  5. Python-Day15 JavaScript/DOM

    JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...

  6. 封装fastjson为spring mvc的json view

    可以将其中的main方法删掉.测试用的.我测试的结果是,jackson比fastjson快. fastjson是1.1.36 jackson是2.2.3 jdk是1.7.40,client cpu是i ...

  7. Error: Linux下 mysql.sock文件丢失被删除解决方法

    在默认情况下,Mysql安装以后会在/tmp目录下生成一个mysql.sock文件,如该文件丢失则Mysql将不能够正常启动,解决方法:使用mysqld_safe 启动即可解决: #basedir:m ...

  8. jvm工具的使用

    打开Java VisualVm->工具->插件  如图: 关于要填写的URL地址到 http://visualvm.java.net/pluginscenters.html 找到jdk版本 ...

  9. 织梦默认编辑器换成kindEditor实操教程

    织梦默认编辑是CKeditor,要想换成kindEditor编辑器,按如下步骤操作. 先看效果图: 首先下载打包好的 kindEditor_for_dedeCMS.ZIP,下载地址:https://d ...

  10. 1.TabActivity、视图树、动画

    整个页面为TabActivity, 其中对TabWidget进行了一些改变,当切换页签时页签后面红色背景会以Translate动画形式移动到相对应的页签后. 布局 )); lastPosition = ...