zoukankan      html  css  js  c++  java
  • linux概念之进程分析

    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@109-com1 6939]# cat ../loadavg
    0.01 0.03 0.00 2/397 19934
    [root@109-com1 6939]# grep run /proc/stat
    procs_running 2
    
    每个值的含义为:
    参数 解释
    lavg_1 (1.0) 1-分钟平均负载
    lavg_5 (1.00) 5-分钟平均负载
    lavg_15(0.93) 15-分钟平均负载
    nr_running (2) 在采样时刻,运行队列的任务的数目,与/proc/stat的procs_running表示相同意思
    nr_threads (19) 在采样时刻,系统中活跃的任务的个数(不包括运行已经结束的任务)
    last_pid(301) 最大的pid值,包括轻量级进程,即线程。
    假设当前有两个CPU,则每个CPU的当前任务数为4.61/2=2.31
    
    /proc/pid/smaps文件
    该文件反映了该进程的相应线性区域的大小
    解释说明:
    每行数据格式如下:
    (内存区域)开始-结束 访问权限  偏移 主设备号:次设备号 i节点  文件。
    be8f1000-be906000 rwxp be8f1000 00:00 0          [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
    21714 root      20   0 2332m 184m 6984 S 16.9 18.5   3596:10 asterisk
     6939 root      20   0 2826m  36m 5916 S  3.7  3.7 226:34.83 FLTService
    
    在/proc/pid/statm中看到的
    
    [root@109-com1 6939]# cat statm
    723692 9315 1479 80 0 692850 0
    
    每列含义解释:
    2826m*1024/4=723692  top中的PID为6939的VIRT字段2826m
    Size (pages)= 723692  任务虚拟地址空间的大小 VmSize/4
    36m*1024/4=9315    top中的PID为6939的RES字段36m
    Resident(pages)= 9315  应用程序正在使用的物理内存的大小 VmRSS/4
    5916/4=1479      top中的PID为6939的SHR字段5916
    Shared(pages)= 1479  共享页数
    
    status文件中的VmExe:       320 kB行    320/4=80
    Trs(pages)=   程序所拥有的可执行虚拟内存的大小 VmExe/4
    status文件中的VmLib:     95976 kB行    有问题的
    Lrs(pages)=   被映像到任务的虚拟内存空间的库的大小 VmLib/4
    
    status文件中的下两行即2771312+88/4=692850
    VmData:  2771312 kB
    VmStk:        88 kB
    Drs(pages)=   程序数据段和用户态的栈的大小 (VmData+VmStk)/4
    
    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:dead
    ppid=0 父进程ID
    pgid=0 线程组号
    sid=0 c该任务所在的会话组ID
    tty_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 该任务在用户态运行的时间,单位为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=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=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中没有的能力,这些能力是被进程自己临时放弃的,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@221-comecs 11755]# pidstat -p 11755 -t 1 20 > /root/117
    
    [root@221-comecs 11755]# pstree -U
    init─┬─auditd───{auditd}
         ├─crond
         ├─master─┬─pickup
         │        └─qmgr
         ├─6*[mingetty]
         ├─rpc.statd
         ├─rpcbind
         ├─rsyslogd───3*[{rsyslogd}]
         ├─safe_asterisk───asterisk───62*[{asterisk}]
         ├─snmpd
         ├─sshd───sshd───bash───pstree
         ├─udevd───2*[udevd]
         └─vmtoolsd───{vmtoolsd}
    [root@221-comecs 11755]# pstree -A
    init-+-auditd---{auditd}
         |-crond
         |-master-+-pickup
         |        `-qmgr
         |-6*[mingetty]
         |-rpc.statd
         |-rpcbind
         |-rsyslogd---3*[{rsyslogd}]
         |-safe_asterisk---asterisk---62*[{asterisk}]
         |-snmpd
         |-sshd---sshd---bash---pstree
         |-udevd---2*[udevd]
         `-vmtoolsd---{vmtoolsd}
    [root@221-comecs 11755]# 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@221-comecs 11755]# ps -efH
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         2     0  0  2014 ?        00:00:00 [kthreadd]
    root         3     2  0  2014 ?        00:00:03   [migration/0]
    root         4     2  0  2014 ?        00:03:46   [ksoftirqd/0]
    root         5     2  0  2014 ?        00:00:00   [migration/0]
    root         6     2  0  2014 ?        00:00:34   [watchdog/0]
    root         7     2  0  2014 ?        00:00:08   [migration/1]
    root         8     2  0  2014 ?        00:00:00   [migration/1]
    root         9     2  0  2014 ?        00:04:53   [ksoftirqd/1]
    root        10     2  0  2014 ?        00:00:34   [watchdog/1]
    root        11     2  0  2014 ?        00:00:02   [migration/2]
    root        12     2  0  2014 ?        00:00:00   [migration/2]
    root        13     2  0  2014 ?        00:03:13   [ksoftirqd/2]
    root        14     2  0  2014 ?        00:00:30   [watchdog/2]
    root        15     2  0  2014 ?        00:00:18   [migration/3]
    root        16     2  0  2014 ?        00:00:00   [migration/3]
    root        17     2  0  2014 ?        00:03:10   [ksoftirqd/3]
    root        18     2  0  2014 ?        00:00:30   [watchdog/3]
    root        19     2  0  2014 ?        00:11:15   [events/0]
    root        20     2  0  2014 ?        02:29:14   [events/1]
    root        21     2  0  2014 ?        00:10:29   [events/2]
    root        22     2  0  2014 ?        00:12:44   [events/3]
    root        23     2  0  2014 ?        00:00:00   [cgroup]
    root        24     2  0  2014 ?        00:00:00   [khelper]
    root        25     2  0  2014 ?        00:00:00   [netns]
    root        26     2  0  2014 ?        00:00:00   [async/mgr]
    root        27     2  0  2014 ?        00:00:00   [pm]
    root        28     2  0  2014 ?        00:01:15   [sync_supers]
    root        29     2  0  2014 ?        00:01:24   [bdi-default]
    root        30     2  0  2014 ?        00:00:00   [kintegrityd/0]
    root        31     2  0  2014 ?        00:00:00   [kintegrityd/1]
    root        32     2  0  2014 ?        00:00:00   [kintegrityd/2]
    root        33     2  0  2014 ?        00:00:00   [kintegrityd/3]
    root        34     2  0  2014 ?        00:00:53   [kblockd/0]
    root        35     2  0  2014 ?        00:00:54   [kblockd/1]
    root        36     2  0  2014 ?        00:00:57   [kblockd/2]
    root        37     2  0  2014 ?        00:00:49   [kblockd/3]
    root        38     2  0  2014 ?        00:00:00   [kacpid]
    root        39     2  0  2014 ?        00:00:00   [kacpi_notify]
    root        40     2  0  2014 ?        00:00:00   [kacpi_hotplug]
    root        41     2  0  2014 ?        00:00:00   [ata_aux]
    root        42     2  0  2014 ?        00:00:00   [ata_sff/0]
    root        43     2  0  2014 ?        00:00:00   [ata_sff/1]
    root        44     2  0  2014 ?        00:00:00   [ata_sff/2]
    root        45     2  0  2014 ?        00:00:00   [ata_sff/3]
    root        46     2  0  2014 ?        00:00:00   [ksuspend_usbd]
    root        47     2  0  2014 ?        00:00:00   [khubd]
    root        48     2  0  2014 ?        00:00:00   [kseriod]
    root        49     2  0  2014 ?        00:00:00   [md/0]
    root        50     2  0  2014 ?        00:00:00   [md/1]
    root        51     2  0  2014 ?        00:00:00   [md/2]
    root        52     2  0  2014 ?        00:00:00   [md/3]
    root        53     2  0  2014 ?        00:00:00   [md_misc/0]
    root        54     2  0  2014 ?        00:00:00   [md_misc/1]
    root        55     2  0  2014 ?        00:00:00   [md_misc/2]
    root        56     2  0  2014 ?        00:00:00   [md_misc/3]
    root        57     2  0  2014 ?        00:00:00   [linkwatch]
    root        58     2  0  2014 ?        00:00:10   [khungtaskd]
    root        59     2  0  2014 ?        00:00:20   [kswapd0]
    root        60     2  0  2014 ?        00:00:00   [ksmd]
    root        61     2  0  2014 ?        00:00:58   [khugepaged]
    root        62     2  0  2014 ?        00:00:00   [aio/0]
    root        63     2  0  2014 ?        00:00:00   [aio/1]
    root        64     2  0  2014 ?        00:00:00   [aio/2]
    root        65     2  0  2014 ?        00:00:00   [aio/3]
    root        66     2  0  2014 ?        00:00:00   [crypto/0]
    root        67     2  0  2014 ?        00:00:00   [crypto/1]
    root        68     2  0  2014 ?        00:00:00   [crypto/2]
    root        69     2  0  2014 ?        00:00:00   [crypto/3]
    root        74     2  0  2014 ?        00:00:00   [kthrotld/0]
    root        75     2  0  2014 ?        00:00:00   [kthrotld/1]
    root        76     2  0  2014 ?        00:00:00   [kthrotld/2]
    root        77     2  0  2014 ?        00:00:00   [kthrotld/3]
    root        78     2  0  2014 ?        00:00:00   [pciehpd]
    root        80     2  0  2014 ?        00:00:00   [kpsmoused]
    root        81     2  0  2014 ?        00:00:00   [usbhid_resumer]
    root       112     2  0  2014 ?        00:00:00   [kstriped]
    root       208     2  0  2014 ?        00:06:51   [mpt_poll_0]
    root       209     2  0  2014 ?        00:00:00   [mpt/0]
    root       210     2  0  2014 ?        00:00:00   [scsi_eh_0]
    root       218     2  0  2014 ?        00:00:00   [scsi_eh_1]
    root       219     2  0  2014 ?        00:00:00   [scsi_eh_2]
    root       331     2  0  2014 ?        00:00:00   [kdmflush]
    root       333     2  0  2014 ?        00:00:00   [kdmflush]
    root       350     2  0  2014 ?        00:10:10   [jbd2/dm-0-8]
    root       351     2  0  2014 ?        00:00:00   [ext4-dio-unwrit]
    root       564     2  0  2014 ?        00:05:11   [vmmemctl]
    root       760     2  0  2014 ?        00:00:00   [jbd2/sda1-8]
    root       761     2  0  2014 ?        00:00:00   [ext4-dio-unwrit]
    root       821     2  0  2014 ?        00:04:26   [kauditd]
    root      1389     2  0  2014 ?        00:07:09   [flush-253:0]
    root      1646     2  0  2014 ?        00:00:00   [rpciod/0]
    root      1647     2  0  2014 ?        00:00:00   [rpciod/1]
    root      1648     2  0  2014 ?        00:00:00   [rpciod/2]
    root      1649     2  0  2014 ?        00:00:00   [rpciod/3]
    root      1651     2  0  2014 ?        00:00:00   [kslowd000]
    root      1652     2  0  2014 ?        00:00:00   [kslowd001]
    root      1653     2  0  2014 ?        00:00:00   [nfsiod]
    root      6154     2  0  2014 ?        00:00:00   [lockd]
    root     10822     2  0  2014 ?        00:00:00   [bluetooth]
    root         1     0  0  2014 ?        00:00:01 /sbin/init
    root       429     1  0  2014 ?        00:00:00   /sbin/udevd -d
    root      1535   429  0  2014 ?        00:00:00     /sbin/udevd -d
    root     10821   429  0  2014 ?        00:00:00     /sbin/udevd -d
    root      1191     1  0  2014 ?        02:49:57   /usr/sbin/vmtoolsd
    root      1279     1  0  2014 ?        00:12:06   auditd
    root      1295     1  0  2014 ?        00:03:09   /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    rpc       1318     1  0  2014 ?        00:00:28   rpcbind
    rpcuser   1336     1  0  2014 ?        00:00:00   rpc.statd
    root      1390     1  0  2014 ?        00:03:46   /usr/sbin/sshd
    root     14974  1390  0 10:17 ?        00:00:00     sshd: root@pts/1
    root     14976 14974  0 10:17 pts/1    00:00:00       -bash
    root     16504 14976  1 11:04 pts/1    00:00:00         ps -efH
    root      1467     1  0  2014 ?        00:02:04   /usr/libexec/postfix/master
    postfix   1475  1467  0  2014 ?        00:00:23     qmgr -l -t fifo -u
    postfix  14264  1467  0 09:55 ?        00:00:00     pickup -l -t fifo -u
    root      1522     1  0  2014 tty2     00:00:00   /sbin/mingetty /dev/tty2
    root      1524     1  0  2014 tty3     00:00:00   /sbin/mingetty /dev/tty3
    root      1526     1  0  2014 tty4     00:00:00   /sbin/mingetty /dev/tty4
    root      1528     1  0  2014 tty5     00:00:00   /sbin/mingetty /dev/tty5
    root      1530     1  0  2014 tty6     00:00:00   /sbin/mingetty /dev/tty6
    root      2751     1  0  2014 tty1     00:00:00   /sbin/mingetty /dev/tty1
    root     25396     1  0  2014 ?        00:01:30   crond
    root     31986     1  0  2014 ?        00:34:51   /usr/sbin/snmpd -LS0-6d -Lf /dev/null -p /var/run/snmpd.pid
    root     11752     1  0 Feb13 ?        00:00:00   /bin/sh /usr/sbin/safe_asterisk
    root     11755 11752  2 Feb13 ?        16:59:27     /usr/sbin/asterisk -f -vvvg -c
    [root@221-comecs 11755]#
    
    [root@221-comecs 11755]# 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@221-comecs 11755]# ps -p 11755
      PID TTY          TIME CMD
    11755 ?        17:00:36 asterisk
    [root@221-comecs 11755]# ps -fp 11755
    UID        PID  PPID  C STIME TTY          TIME CMD
    root     11755 11752  2 Feb13 ?        17:00:39 /usr/sbin/asterisk -f -vvvg -c
    [root@221-comecs 11755]# ps -Fp 11755
    UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
    root     11755 11752  2 545790 97840  2 Feb13 ?        17:00:31 /usr/sbin/asterisk -f -vvvg -c
    [root@221-comecs 11755]# ps -efH
    
    [root@221-comecs 11755]# ps -fp 1295 -m
    UID        PID  PPID  C STIME TTY          TIME CMD
    root      1295     1  0  2014 ?        00:03:09 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root         -     -  0  2014 -        00:00:00 -
    root         -     -  0  2014 -        00:01:26 -
    root         -     -  0  2014 -        00:01:42 -
    root         -     -  0  2014 -        00:00:00 -
    [root@221-comecs 11755]# ps -fp 1295 -L
    UID        PID  PPID   LWP  C NLWP STIME TTY          TIME CMD
    root      1295     1  1295  0    4  2014 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295     1  1296  0    4  2014 ?        00:01:26 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295     1  1297  0    4  2014 ?        00:01:42 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295     1  1298  0    4  2014 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    [root@221-comecs 11755]# ps -fp 1295 -T
    UID        PID  SPID  PPID  C STIME TTY          TIME CMD
    root      1295  1295     1  0  2014 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295  1296     1  0  2014 ?        00:01:26 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295  1297     1  0  2014 ?        00:01:42 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295  1298     1  0  2014 ?        00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    [root@221-comecs 11755]# ps -fp 1295 H
    UID        PID  PPID  C STIME TTY      STAT   TIME CMD
    root      1295     1  0  2014 ?        Sl     0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295     1  0  2014 ?        Sl     1:26 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295     1  0  2014 ?        Sl     1:42 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root      1295     1  0  2014 ?        Sl     0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    [root@221-comecs 11755]# ps -fp 1295 m
    UID        PID  PPID  C STIME TTY      STAT   TIME CMD
    root      1295     1  0  2014 ?        -      3:09 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root         -     -  0  2014 -        Sl     0:00 -
    root         -     -  0  2014 -        Sl     1:26 -
    root         -     -  0  2014 -        Sl     1:42 -
    root         -     -  0  2014 -        Sl     0:00 -
    [root@221-comecs 11755]# ps -fp 1295 -m
    UID        PID  PPID  C STIME TTY          TIME CMD
    root      1295     1  0  2014 ?        00:03:09 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
    root         -     -  0  2014 -        00:00:00 -
    root         -     -  0  2014 -        00:01:26 -
    root         -     -  0  2014 -        00:01:42 -
    root         -     -  0  2014 -        00:00:00 -

    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进程调度浅析

  • 相关阅读:
    Java 8-Lambda表达式、方法引用、标准函数接口与流操作、管道操作之间的关系
    给同学们的精彩博客集合-编程之路
    鲁迅先生
    常用文本编辑器
    《Java程序设计》公选课学习指南
    《数据结构在线课程》使用指南
    在线课程集合(集美大学计算机工程学院)
    《Java程序设计》在线课程使用说明
    《Python程序设计与应用》在线课程使用说明
    2020版《数据结构》课程学习指南
  • 原文地址:https://www.cnblogs.com/createyuan/p/3728340.html
Copyright © 2011-2022 走看看