linux ps 简书,史上最全ps 命令解析
進(jìn)程狀態(tài)
https://www.cnblogs.com/diegodu/p/9167671.html
Linux進(jìn)程狀態(tài):D (TASK_UNINTERRUPTIBLE),不可中斷的睡眠狀態(tài)。
與TASK_INTERRUPTIBLE狀態(tài)類似,進(jìn)程處于睡眠狀態(tài),但是此刻進(jìn)程是不可中斷的。不可中斷,指的并不是CPU不響應(yīng)外部硬件的中斷,而是指進(jìn)程不響應(yīng)異步信號。
在進(jìn)程對某些硬件進(jìn)行操作時(比如進(jìn)程調(diào)用read系統(tǒng)調(diào)用對某個設(shè)備文件進(jìn)行讀操作,而read系統(tǒng)調(diào)用最終執(zhí)行到對應(yīng)設(shè)備驅(qū)動的代碼,并與對應(yīng)的物理設(shè)備進(jìn)行交互),可能需要使用TASK_UNINTERRUPTIBLE狀態(tài)對進(jìn)程進(jìn)行保護(hù),以避免進(jìn)程與設(shè)備交互的過程被打斷,造成設(shè)備陷入不可控的狀態(tài)。這種情況下的TASK_UNINTERRUPTIBLE狀態(tài)總是非常短暫的,通過ps命令基本上不可能捕捉到。
進(jìn)程占用內(nèi)存
在講解ps命令的參數(shù)之前,有必要先介紹一下Linux對進(jìn)程占用內(nèi)存的計算依據(jù)。因為Linux中的進(jìn)程是使用虛擬地址的,這些進(jìn)程通過malloc()或者mmap()向內(nèi)存申請內(nèi)存之后(這部分內(nèi)存大小稱為VSS - Virtual Set Size),內(nèi)核并不會立刻為其分配實際的物理內(nèi)存。等到進(jìn)程真正使用到內(nèi)存時(比如調(diào)用了memset()函數(shù)),內(nèi)核才會為這個進(jìn)程分配物理內(nèi)存,并建立虛擬地址和物理地址之間的映射(參考這篇文章)。
SYSV 風(fēng)格選項 - A 到 - Z 和 - a 到 - z 共 52 個,BSD 風(fēng)格選項 A 到 Z 和 a 到 z 共 52 個。于是 ps 命令就有一共 104 個命令選項可能性。
ps.jpg
在這 104 個命令選項中,未啟用的或曾經(jīng)使用過現(xiàn)在廢棄的命令選項有如下 40 個,分別是 A、B、C、D、E、F、G、I、J、K、P、Q、R、W、Y、b、d、i、y、z、-B、-D、-E、-I、-J、-K、-Q、-R、-S、-W、-X、-Y、-b、-h、-i、-k、-r、-v、-x 和 - z。
輸出是不同的
[root@node1 ~]# ps aux | wc -l
125
[root@node1 ~]# ps | wc -l
4
[root@node1 ~]#
常用
Linux ps 命令顯示所有進(jìn)程信息的選項只有 2 個,即 SYSV 風(fēng)格的 - e 和 - A。相比之下,-e 更容易記憶和書寫,請大家牢記這個 - e 選項。
大家知道,ps 命令的所有信息都是 linux kernel 生成,并通過 / proc / 目錄輸出給用戶空間的。在 / proc / 目錄下,每一個以數(shù)字開頭的目錄,就對應(yīng)一個進(jìn)程信息。既然如此,通過如下命令便可一目了然。
ps -e | wc -l && ps -A | wc -l&& ls /proc/ | grep '^[1-9]' | wc -l
證明 參數(shù) - e 和 - A 顯示的進(jìn)程記錄數(shù)確實和 proc 目錄下的所有進(jìn)程目錄數(shù)一致。
#樹形排序( 進(jìn)程之間的關(guān)系)
f 和 - H 就是實現(xiàn)這個樹形排序功能的 2 個選項。
#排序
選項 k 可以讓我們以某個字段為條件對輸出結(jié)果進(jìn)行排序,并且還可以使用 +- 符號設(shè)置升序排序還是降序排序
ps -e u k rss
ps -e u k -rss
ps -e k ppid,rss -o pid,ppid,rss,ucmd
先按 ppid 進(jìn)行升序排序,ppid 值相同時,再按 rss 值進(jìn)行升序排序。
#進(jìn)程數(shù)
ps -eL h| wc -l
#線程信息
ls /proc/6270/task/
Linux ps 同樣提供了一組選項可以將每個進(jìn)程的線程信息詳細(xì)展現(xiàn),這組選項包括 H、-L、-T、M、m 和 - m。在講解這些選項之前,我們先看一個小測試。
ps -C mysqld -L #查看mysql 線程
第一行 PID 等于 LWP(線程 ID)的值,說明是線程組的主線程(即進(jìn)程)。其余三個線程 ID 各不相同,但 PID 值都和主線程的 PID 值一樣,說明是同一線程組的普通線程。
ps -C mysqld -m O lwp #同樣和上一個命令
#ps 一共有多少顯示項目
ps L | wc -l
Linux ps 命令的 aux 選項組合輸出 PID、%CPU、%MEM、RSS、TIME 等數(shù)據(jù)項,ps 命令的 - el 選項組合輸出 PID、PPID、WCHAN、TIME、CMD 等數(shù)據(jù)項。首先一個問題就是,ps 命令一共有多少數(shù)據(jù)項可以輸出。這個問題很好回答,通過 L 選項很容易獲取,一共有 168 個數(shù)據(jù)輸出項。
其次的一個問題就是,是什么決定了 ps aux 命令輸出結(jié)果中恰恰包含 USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME 和 COMMAND 這 11 個數(shù)據(jù)項呢。原因是 ps 命令中有一些選項用來對數(shù)據(jù)字段進(jìn)行固定組合的作用。其中 aux 中的 u 選項就固定包含了以上 11 個數(shù)據(jù)輸出項,并且他們的顯示順序也已經(jīng)固化在代碼中。
參數(shù)為
BSD 風(fēng)格時,默認(rèn)都會顯示 PID、TTY、STAT、TIME 和 COMMAND 這 5 個字段。
參數(shù)為 SYSV 風(fēng)格時,默認(rèn)都會顯示 PID、TTY、TIME 和 CMD 這 4 個字段。
ps 命令無參數(shù)時默認(rèn)為 SYSV 風(fēng)格。
ps -o %p,%P,%n,%a,%x,%t
PID, PPID, NI,COMMAND , TIME, ELAPSED
456, 454, 0,-bash ,00:00:01, 06:20:28
22945, 456, 0,ps -o %p,%P,%n,%a,%x,%t ,00:00:00, 00:00
[root@node1 ~]# ps -o "%p|%P|%n|%a|%x|%t"
PID| PPID| NI|COMMAND | TIME| ELAPSED
456| 454| 0|-bash |00:00:01| 06:21:14
22990| 456| 0|ps -o %p|%P|%n|%a|%x|%t |00:00:00| 00:00
使用 w 或 - w 選項,就會將完整的進(jìn)程命令信息顯示,多出的部分換行顯示。有的時候為了效果好一點,建議我們可以多使用幾次 w 選項,比如 ww、www 或 wwww。
選項 u 的 COMMAND 字段,默認(rèn)會輸出進(jìn)程路徑和執(zhí)行參數(shù)信息。從上面的例子可以看出,選項 c 可以使選項 u 的 COMMAND 字段更加精簡,只保留進(jìn)程名稱。選項 e 可以使選項 u 的 COMMAND 字段更加豐富,增加進(jìn)程環(huán)境變量的相關(guān)內(nèi)容。
[root@node1 ~]# ps u c
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 456 0.0 0.2 116456 3136 pts/0 Ss 10:45 0:01 bash
root 2163 0.0 0.2 116232 2604 pts/1 Ss+ 11:13 0:00 bash
root 6079 0.0 0.0 110104 796 tty1 Ss+ 3月21 0:00 agetty
root 23201 0.0 0.1 155360 1824 pts/0 R+ 17:10 0:00 ps
[root@node1 ~]# ps u e ww
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 456 0.0 0.2 116456 3136 pts/0 Ss 10:45 0:01 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=192.168.174.1 1969 22 SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 SSH_TTY=/dev/pts/0 TERM=vt100 XDG_SESSION_ID=149 XDG_RUNTIME_DIR=/run/user/0
root 2163 0.0 0.2 116232 2604 pts/1 Ss+ 11:13 0:00 -bash USER=root LOGNAME=root HOME=/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin MAIL=/var/mail/root SHELL=/bin/bash SSH_CLIENT=192.168.174.1 1969 22 SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 SSH_TTY=/dev/pts/1 TERM=vt100 XDG_SESSION_ID=149 XDG_RUNTIME_DIR=/run/user/0
root 6079 0.0 0.0 110104 796 tty1 Ss+ 3月21 0:00 /sbin/agetty --noclear tty1 linux LANG= PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin TERM=linux LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
root 23209 0.0 0.1 155360 1832 pts/0 R+ 17:10 0:00 ps u e ww XDG_SESSION_ID=149 HOSTNAME=node1 TERM=vt100 SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.174.1 1969 22 SSH_TTY=/dev/pts/0 USER=root etcd=/usr/local/kubernetes/bin LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36: MAIL=/var/spool/mail/root PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/kubernetes/bin:/root/bin PWD=/root LANG=zh_CN.UTF-8 HISTCONTROL=ignoredups SHLVL=1 HOME=/root LOGNAME=root XDG_DATA_DIRS=/root/.local/share/flatpak/exports/share:/var/lib/flatpak/exports/share:/usr/local/share:/usr/share SSH_CONNECTION=192.168.174.1 1969 192.168.174.202 22 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/0 _=/usr/bin/ps
總結(jié)
以上是生活随笔為你收集整理的linux ps 简书,史上最全ps 命令解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑马前端案例——模拟京东显示密码
- 下一篇: 软考软件评测师备考攻略