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進程調度淺析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM