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