centos7中ps显示的内容_值得收藏,史上最全Linux ps命令详解
原標(biāo)題:值得收藏,史上最全Linux ps命令詳解
一、程序員的疑惑
大概在十多年前,我當(dāng)時(shí)還是一個(gè)產(chǎn)品經(jīng)理。由于一些工作的原因,需要向運(yùn)維工程師學(xué)習(xí)一些linux常用命令。
當(dāng)使用linux ps這個(gè)十分常用的命令時(shí),遇到了一個(gè)小小的疑惑。有些工程師推薦使用ps aux的命令組合,有些工程師推薦使用ps -aux的命令組合,從輸出結(jié)果上來(lái)看似乎也沒(méi)有什么不同。
考慮到如常用的ls -l命令在內(nèi),很多l(xiāng)inux命令選項(xiàng)前都要加上一個(gè)短橫線,這么來(lái)看似乎ps -axu是正確的。
但是一些早期的linux版本,在執(zhí)行ps -axu時(shí)又會(huì)報(bào)出如下錯(cuò)誤Warning: bad syntax,而ps aux卻沒(méi)有這樣的報(bào)錯(cuò)信息,這么看來(lái)似乎ps aux又是正確的。查閱市面上的一些linux書(shū)籍,在介紹linux ps命令示例時(shí),有些說(shuō)用ps aux,而有些又說(shuō)用ps -axu。實(shí)在是讓我這個(gè)初學(xué)者摸不著頭腦。
再后來(lái),隨著我加入運(yùn)維團(tuán)隊(duì)對(duì)linux ps命令逐步深入使用,學(xué)會(huì)了查看man page和help,發(fā)現(xiàn)其中有ps命令的exmaple,果然是ps aux的用法是正確的。
不過(guò)隨著對(duì)linux ps命令使用的逐步深入,對(duì)ps命令的其他疑問(wèn)越來(lái)越多。比如,我們天天在使用ps命令時(shí)輸出的%CPU列到底是什么含義?為什么和top顯示的%CPU的值有時(shí)候差異非常大?
再比如,當(dāng)我使用ps -el命令時(shí),為什么我的進(jìn)程名是systemd-journald,而ps命令只顯示systemd-journal,弄丟了最后1個(gè)字母d。
帶著這么多疑惑,3年多前我有機(jī)會(huì)簡(jiǎn)單的學(xué)習(xí)了一下linux ps源代碼,逐步解開(kāi)了上面這些疑惑。后來(lái)發(fā)現(xiàn)公司的很多同事也對(duì)ps命令有各種問(wèn)題和疑問(wèn),于是想把之前對(duì)ps命令的學(xué)習(xí)經(jīng)驗(yàn)總結(jié)成文檔,供大家參考。希望能給大家?guī)?lái)幫助。
二、Linux ps命令選項(xiàng)解析
Linux ps命令功能很強(qiáng)大,了解ps命令首先需要從ps命令的選項(xiàng)格式入手。像其他很多l(xiāng)inux shell命令一樣,ps命令的選項(xiàng)也有長(zhǎng)格式和短格式的區(qū)別。短選項(xiàng)中也可以帶中橫線、也可以不帶中橫線。
根據(jù)選項(xiàng)長(zhǎng)短和是否有橫線的情況,ps命令的選項(xiàng)可以分為以下3類:
BSD風(fēng)格語(yǔ)法,必須不能以中橫線開(kāi)頭;
SYSV風(fēng)格語(yǔ)法,必須僅一個(gè)中橫線開(kāi)頭;
GNU風(fēng)格語(yǔ)法,必須以兩個(gè)中橫線開(kāi)頭;
不過(guò)linux ps命令的長(zhǎng)選項(xiàng)并不多,而且?guī)缀趺總€(gè)長(zhǎng)選項(xiàng)都有一個(gè)功能完全相同的短選項(xiàng)對(duì)應(yīng)。在centos7環(huán)境運(yùn)行如下命令可以見(jiàn)。
在本文中我們將主要介紹BSD和SYSV兩種風(fēng)格的ps命令選項(xiàng)。如果大家有對(duì)GNU風(fēng)格的長(zhǎng)選項(xiàng)使用的需求,那么可以參考對(duì)應(yīng)的短選項(xiàng)語(yǔ)法即可。需要注意的是GNU風(fēng)格選項(xiàng)都是帶參數(shù)值的,例如—sid 1。
各風(fēng)格的ps命令選項(xiàng)可以混合使用,比如:
Linux ps命令解析SYSV和BSD風(fēng)格選項(xiàng)時(shí),會(huì)分別將每組字符串都解析成單獨(dú)的字母。以下三個(gè)實(shí)例,拆分前后的命令都是等價(jià)的。
從示例中可以看出,當(dāng)SYSV風(fēng)格語(yǔ)法一個(gè)中橫線之后有多個(gè)字母選項(xiàng)時(shí),拆分后需要給每一個(gè)字母前都加上一個(gè)中橫線。也就是說(shuō)-elL轉(zhuǎn)換為-e -l -L,而不是轉(zhuǎn)換為-e l L。
從上面例子中也可以看出,ps命令選項(xiàng)除了有是否加中橫線的區(qū)別,字母大小寫(xiě)也表現(xiàn)為不同的選項(xiàng)含義。英文字母一共26個(gè),SYSV風(fēng)格選項(xiàng)-A到-Z和-a到-z共52個(gè),BSD風(fēng)格選項(xiàng)A到Z和a到z共52個(gè)。于是ps命令就有一共104個(gè)命令選項(xiàng)可能性。
不同版本的ps命令選項(xiàng)的使用可能略有出入,本文主要使用主流的centos7上的procps-ng version 3.3.10版本來(lái)說(shuō)明。
在這104個(gè)命令選項(xiàng)中,未啟用的或曾經(jīng)使用過(guò)現(xiàn)在廢棄的命令選項(xiàng)有如下40個(gè),分別是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。
既然是未啟用或已廢棄,那么運(yùn)行帶這個(gè)選項(xiàng)的ps命令應(yīng)該會(huì)報(bào)錯(cuò)。試運(yùn)行下大部分確實(shí)如此,不過(guò)也有幾個(gè)例外,比如ps -x命令就不報(bào)錯(cuò),可以正常輸出。這樣的例外選項(xiàng)一共有如下7個(gè)-S、-X、-h、-k、-r、-v和-x,本文第九節(jié)會(huì)給予說(shuō)明。
這104個(gè)命令選項(xiàng)中的其余64個(gè)選項(xiàng)就構(gòu)成了linux ps命令的龐大命令選項(xiàng)體系,接下的內(nèi)容就對(duì)他們分別給予介紹。
要查看我們當(dāng)前ps命令的版本,就用到V、-V這2個(gè)選項(xiàng)。
為了本文中意思表達(dá)更加準(zhǔn)確,這里借用數(shù)據(jù)庫(kù)中的幾個(gè)概念。ps命令輸出結(jié)果,約定為結(jié)果集。結(jié)果集中的每一行,我們約定為記錄(record)。結(jié)果集或記錄中的每一列,我們約定為字段(field)。
三、Linux ps命令的記錄類選項(xiàng)
差不多每一個(gè)工程師使用ps命令時(shí)應(yīng)該都有這樣的疑問(wèn), 使用ps aux時(shí)輸出結(jié)果中記錄行數(shù)要遠(yuǎn)大于只使用ps命令時(shí)(如下所示)。
這其實(shí)會(huì)讓很多工程師在使用ps命令查找需要的進(jìn)程時(shí)心里很忐忑,會(huì)不會(huì)由于命令的選項(xiàng)使用不當(dāng)導(dǎo)致ps沒(méi)有列出所需要的進(jìn)程信息。正是這個(gè)原因,我們首先需要搞懂ps命令影響記錄行數(shù)的那些選項(xiàng)。
3.1、all_processes選項(xiàng)
Linux ps命令的記錄類選項(xiàng)大概有20幾個(gè)之多。有些可以列出所有的進(jìn)程信息,有些按某種規(guī)則篩選顯示部分進(jìn)程信息。如今操作系統(tǒng)中awk、sed和grep這些shell文本處理命令的功能都十分強(qiáng)大,我們重點(diǎn)還是掌握ps命令中那些顯示所有進(jìn)程信息記錄的選項(xiàng),其他ps命令過(guò)濾選項(xiàng)都可以通過(guò)shell文本處理命令(awk、sed和grep)間接實(shí)現(xiàn)。
Linux ps命令顯示所有進(jìn)程信息的選項(xiàng)只有2個(gè),即SYSV風(fēng)格的-e和-A。相比之下,-e更容易記憶和書(shū)寫(xiě),請(qǐng)大家牢記這個(gè)-e選項(xiàng)。
大家知道,ps命令的所有信息都是linux kernel生成,并通過(guò)/proc/目錄輸出給用戶空間的。在/proc/目錄下,每一個(gè)以數(shù)字開(kāi)頭的目錄,就對(duì)應(yīng)一個(gè)進(jìn)程信息。既然如此,通過(guò)如下命令便可一目了然。
參數(shù)-e和-A顯示的進(jìn)程記錄數(shù)確實(shí)和proc目錄下的所有進(jìn)程目錄數(shù)一致。
3.2、simple_select選項(xiàng)
Linux ps命令的simple_select選項(xiàng)一共5個(gè),具體包括-a、-d、a、g和x。他們包括2個(gè)SYSV風(fēng)格和3個(gè)BSD風(fēng)格選項(xiàng)。2個(gè)SYSV風(fēng)格和3個(gè)BSD風(fēng)格的選項(xiàng)不能同時(shí)使用,否則會(huì)報(bào)錯(cuò)。
2個(gè)SYSV風(fēng)格或3個(gè)BSD風(fēng)格內(nèi)部可以組合使用,具體的組合可能性有-ad、ga、ax、gx、agx。這里值得注意的是這種字母組合選項(xiàng)絕對(duì)不是單字母選項(xiàng)篩選規(guī)則的簡(jiǎn)單組合,ps命令給這幾種組合賦予了新的篩選規(guī)則。
Linux環(huán)境下的ps命令,會(huì)對(duì)BSD風(fēng)格simple_select選項(xiàng)部分做2個(gè)特殊處理:
在原來(lái)的BSD風(fēng)格simple_select情況下,再額外增加一個(gè)g選項(xiàng);
如果已經(jīng)有a、g和x三個(gè)選項(xiàng)都出現(xiàn)了,那么就直接替換為-e選項(xiàng);
按照這2個(gè)特殊處理規(guī)則,ps aux選項(xiàng)組合等價(jià)于ps auxg,等價(jià)于ps agx u,等價(jià)于ps -e u。
總結(jié)下來(lái),ps命令simple_select選項(xiàng)只有6種組合情況-a、-d、-ad、g、ga、gx。每一種選項(xiàng)都賦予一個(gè)位圖值。ps命令通過(guò)位圖計(jì)算來(lái)實(shí)現(xiàn)它的篩選規(guī)則。比如g選項(xiàng)的位圖值select_bits是0x0a0a,下面以g選項(xiàng)為例說(shuō)明。
關(guān)于8、4、2、1的含義(關(guān)于tty、session、tgid和euid字段含義參考第七節(jié)):
“8” tty值等于當(dāng)前進(jìn)程tty值的進(jìn)程;
“4” tty值為空的進(jìn)程;
“2” session值等于當(dāng)前進(jìn)程tgid(pid)值的進(jìn)程;
“1” euid值等于當(dāng)前進(jìn)程euid值的進(jìn)程;
很明顯“4”這位都缺失,1這位都存在,那么g選項(xiàng)的含義就是:顯示所有tty值存在的且euid值等于當(dāng)前進(jìn)程euid值的進(jìn)程。對(duì)此持懷疑態(tài)度的同學(xué)可以通過(guò)如下2個(gè)命令進(jìn)行驗(yàn)證。
同樣的分析方法,其他幾個(gè)選項(xiàng)和選項(xiàng)組合的含義:
選項(xiàng)-a含義:顯示所有tty值存在的且session值不等于當(dāng)前進(jìn)程tgid(pid)值的進(jìn)程;
選項(xiàng)-d含義:顯示所有session值不等于當(dāng)前進(jìn)程tgid(pid)值的進(jìn)程;
選項(xiàng)組合-ad含義:顯示所有tty值存在的或session值不等于當(dāng)前進(jìn)程tgid(pid)值的進(jìn)程。換句話說(shuō),被過(guò)濾掉的是所有tty值為空的且session值等于當(dāng)前進(jìn)程tgid(pid)值的進(jìn)程;
選項(xiàng)組合ga(或選項(xiàng)a)含義:顯示所有tty值存在的進(jìn)程;
選項(xiàng)組合gx(或選項(xiàng)x)含義:顯示所有euid值等于當(dāng)前進(jìn)程euid值的進(jìn)程;3.3、selection_list選項(xiàng)
這類選項(xiàng)比較容易理解,都是根據(jù)進(jìn)程的某個(gè)屬性值對(duì)進(jìn)程進(jìn)行篩選。他們大多需要一個(gè)選項(xiàng)的參數(shù),而且也都有功能完全一樣的GNU風(fēng)格的長(zhǎng)選項(xiàng)對(duì)應(yīng)。此類選項(xiàng)一共13個(gè),主要分為如下幾組:
進(jìn)程ID選項(xiàng),查詢PID值為一個(gè)或幾個(gè)PID值范圍的進(jìn)程信息。
進(jìn)程會(huì)話(session)ID選項(xiàng),有關(guān)SessionID可以參見(jiàn)8.1小節(jié)。
用戶ID選項(xiàng),參見(jiàn)8.7小節(jié)。
用戶組ID選項(xiàng),參見(jiàn)8.7小節(jié)。
進(jìn)程名稱選項(xiàng),顯示符合當(dāng)前進(jìn)程名稱參數(shù)的進(jìn)程。這里需要注意,當(dāng)進(jìn)程名參數(shù)值字符串長(zhǎng)度大于15時(shí),只是用其前15位作為匹配條件,參見(jiàn)8.2小節(jié)
進(jìn)程終端(tty)選項(xiàng)
這些選項(xiàng)不但可以單獨(dú)使用,還可以組合使用(如下所示)。需要注意的是這些選項(xiàng)之間的組合是邏輯或的關(guān)系,即或者符合-u選項(xiàng)條件或者符合-p選項(xiàng)條件。
$ ps -u root -p 1
3.4、特殊選擇選項(xiàng)
當(dāng)不希望結(jié)果中出現(xiàn)標(biāo)題頁(yè)頭這一行信息時(shí),h選項(xiàng)可以隱藏ps輸出結(jié)果中的標(biāo)題欄。
如果我們只希望列出運(yùn)行中的R狀態(tài)和D狀態(tài)的進(jìn)程,r 選項(xiàng)選中時(shí)將只顯示其他篩選條件過(guò)濾后的結(jié)果集中的R和D狀態(tài)進(jìn)程。幫助手冊(cè)上寫(xiě)只篩選R狀態(tài)是不正確的,這里也包括D狀態(tài)進(jìn)程的篩選。$ ps -e r
有時(shí)候如果我們需要顯示的進(jìn)程記錄不好篩選,但是他的補(bǔ)集卻很容易篩選。那我們可以使用-N選項(xiàng)。選中此選項(xiàng)時(shí),將以系統(tǒng)中所有進(jìn)程(ps -e結(jié)果)為全集對(duì)前述條件篩選后的結(jié)果取補(bǔ)集,即只顯示原來(lái)不顯示的記錄。下面的例子中,去掉標(biāo)題欄一行信息后,472等于456加16,說(shuō)明全集等于本集加補(bǔ)集(如下示例所示)。
3.5、記錄類選項(xiàng)的作用順序
本節(jié)前幾部分全面的介紹了記錄篩選類選項(xiàng),本小節(jié)將對(duì)這些選項(xiàng)的綜合作用順序進(jìn)行一個(gè)系統(tǒng)介紹。
記錄類選項(xiàng)是對(duì)/proc/目錄下的進(jìn)程信息逐條篩選過(guò)濾的:
首先判斷是否有all_processes選項(xiàng)。如果有all_processes選項(xiàng),則本條記錄被選擇。如果沒(méi)有all_processes選項(xiàng),則繼續(xù)下一規(guī)則。
其次判斷是否有simple_select選項(xiàng)。如果有simple_select選項(xiàng),則使用simple_select選項(xiàng)規(guī)則判斷本條記錄是否被選中。如果沒(méi)有被simple_select選項(xiàng)選擇,則繼續(xù)下一條規(guī)則。
然后判斷是否有selection_list選項(xiàng)。如果有selection_list選項(xiàng),則使用selection_list選項(xiàng)判斷本條記錄是否被選中。如果沒(méi)有selection_list選項(xiàng),則繼續(xù)下一條規(guī)則。
然后判斷選項(xiàng)中是否有BSD風(fēng)格的選項(xiàng)。如果有BSD風(fēng)格選項(xiàng),則使用simple_select類的選項(xiàng)g規(guī)則判斷本條記錄是否被選中。如果沒(méi)有BSD風(fēng)格選項(xiàng),則進(jìn)入下一條規(guī)則。
此時(shí)不論ps命令有SYSV風(fēng)格選項(xiàng)還是僅無(wú)選項(xiàng)ps命令,都會(huì)使用一個(gè)新的simple_select選項(xiàng)位圖進(jìn)行篩選過(guò)濾,位圖值為0xaa00。如果還沒(méi)有被選中,則徹底失去被選中的機(jī)會(huì)。位圖值0xaa00的意義是:所有tty值等于當(dāng)前進(jìn)程tty的且euid值等于當(dāng)前進(jìn)程euid值的進(jìn)程。
接下來(lái)再看是否有r選項(xiàng)。如果有r選項(xiàng)則以上5個(gè)環(huán)節(jié)被選中的記錄中,只有R和D狀態(tài)的記錄才能被繼續(xù)選中。如果沒(méi)有r選項(xiàng),則以上5個(gè)環(huán)節(jié)中被選中的記錄,都繼續(xù)被選中。
最后看是否有-N選項(xiàng),如果有-N選項(xiàng)則以上第6個(gè)環(huán)節(jié)選中的將不被選中,第6個(gè)環(huán)節(jié)未選中的將被選中。如果沒(méi)有-N選項(xiàng),則以上第6個(gè)環(huán)節(jié)中被選中的記錄,還繼續(xù)被選中。
選項(xiàng)h單獨(dú)生效,如果有h選項(xiàng)則取消結(jié)果集的標(biāo)題欄,如果沒(méi)有h選項(xiàng)則標(biāo)題欄保持輸出。四、Linux ps命令輸出結(jié)果排序選項(xiàng)
上面一章介紹了記錄類選項(xiàng)的使用,了解了如何篩選符合我們要求的記錄集。如果我們需要對(duì)輸出結(jié)果進(jìn)行排序,那么ps命令也給我們提供了3個(gè)選項(xiàng),分別是k、f和-H。
4.1、字段排序選項(xiàng)
選項(xiàng)k可以讓我們以某個(gè)字段為條件對(duì)輸出結(jié)果進(jìn)行排序,并且還可以使用+-符號(hào)設(shè)置升序排序還是降序排序。
選項(xiàng)k還可以使用多個(gè)字段同時(shí)對(duì)結(jié)果集排序,從輸出結(jié)果可以看到,先按ppid進(jìn)行升序排序,ppid值相同時(shí),再按rss值進(jìn)行升序排序。
4.2、樹(shù)形排序選項(xiàng)
每一個(gè)進(jìn)程都有一個(gè)父進(jìn)程,所有用戶空間的進(jìn)程的最終父進(jìn)程都是1號(hào)進(jìn)程,所有內(nèi)核空間的線程的最終父線程都是2號(hào)線程。這樣所有進(jìn)程按照父子進(jìn)程的關(guān)系就可以構(gòu)成2個(gè)樹(shù)形結(jié)構(gòu)。選項(xiàng)f和-H就是實(shí)現(xiàn)這個(gè)樹(shù)形排序功能的2個(gè)選項(xiàng)。
從上面的結(jié)果中不難看出,選項(xiàng)f是使用ACSII碼對(duì)父子進(jìn)程進(jìn)行關(guān)聯(lián),選項(xiàng)-H是使用tab空格對(duì)父子進(jìn)程進(jìn)行關(guān)聯(lián)。
五、Linux ps命令線程展開(kāi)選項(xiàng)
前面章節(jié)主要是說(shuō)明了如何篩選和顯示進(jìn)程的信息。同一個(gè)進(jìn)程有時(shí)候還會(huì)起多個(gè)線程,同樣內(nèi)核也在/proc/目錄下顯示了進(jìn)程的線程信息,如下所示。
Linux ps同樣提供了一組選項(xiàng)可以將每個(gè)進(jìn)程的線程信息詳細(xì)展現(xiàn),這組選項(xiàng)包括H、-L、-T、M、m和-m。在講解這些選項(xiàng)之前,我們先看一個(gè)小測(cè)試。
同樣為了統(tǒng)計(jì)的準(zhǔn)確,用h選項(xiàng)去掉標(biāo)題欄信息。其中最后一個(gè)486的值是ps -e h的記錄數(shù),說(shuō)明當(dāng)前系統(tǒng)有486個(gè)進(jìn)程。非常巧的是486恰巧等于1217減去731的值。從這里我們可以了解到H、-L和-T這3個(gè)選項(xiàng)記錄數(shù)都是731,M、m和-m三個(gè)選項(xiàng)記錄數(shù)都是1217。找一個(gè)起了多線程的進(jìn)程查看下具體輸出內(nèi)容。
選項(xiàng)-L的輸出可以看到一共4行輸出結(jié)果,第一行PID等于LWP(線程ID)的值,說(shuō)明是線程組的主線程(即進(jìn)程)。其余三個(gè)線程ID各不相同,但PID值都和主線程的PID值一樣,說(shuō)明是同一線程組的普通線程。
第二組三個(gè)選項(xiàng)單純的顯示不便識(shí)別,我們這里先引入一個(gè)后面講解的O選項(xiàng),額外增加一個(gè)輸出值LWP。
可以看到一共5行輸出結(jié)果,對(duì)照上面的輸出我們可以判斷出,第二組選項(xiàng)除了把線程組中的4個(gè)線程分別顯示之外,又額外增加了一行內(nèi)容專門(mén)用于顯示這個(gè)線程組(即進(jìn)程)的信息。我們?cè)倩仡^看前面的1271減去731等于486應(yīng)該就很容易明白了。
在H、-L和-T之間,以及M、m和-m之間,輸出信息也略有不同,不過(guò)這些都是數(shù)據(jù)項(xiàng)和格式的不同,后面有專門(mén)章節(jié)介紹。
六、Linux ps命令的字段選項(xiàng) 6.1、字段組合類通用選項(xiàng)
很多人在使用ps命令時(shí)都會(huì)注意到,在我們輸入不同的命令組合時(shí),ps命令輸出結(jié)果中列的數(shù)據(jù)項(xiàng)并不統(tǒng)一。比如下面2個(gè)命令。
Linux ps命令的aux選項(xiàng)組合輸出PID、%CPU、%MEM、RSS、TIME等數(shù)據(jù)項(xiàng),ps命令的-el選項(xiàng)組合輸出PID、PPID、WCHAN、TIME、CMD等數(shù)據(jù)項(xiàng)。首先一個(gè)問(wèn)題就是,ps命令一共有多少數(shù)據(jù)項(xiàng)可以輸出。這個(gè)問(wèn)題很好回答,通過(guò)L選項(xiàng)很容易獲取,一共有168個(gè)數(shù)據(jù)輸出項(xiàng)。
其次的一個(gè)問(wèn)題就是,是什么決定了ps aux命令輸出結(jié)果中恰恰包含USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME和COMMAND這11個(gè)數(shù)據(jù)項(xiàng)呢。原因是ps命令中有一些選項(xiàng)用來(lái)對(duì)數(shù)據(jù)字段進(jìn)行固定組合的作用。其中aux中的u選項(xiàng)就固定包含了以上11個(gè)數(shù)據(jù)輸出項(xiàng),并且他們的顯示順序也已經(jīng)固化在代碼中。
Linux ps命令這種字段組合類選項(xiàng)一共15個(gè)。其中6個(gè)選項(xiàng)用途比較廣泛,其余9個(gè)選項(xiàng)都主要適合在查詢某一種問(wèn)題時(shí)使用。
本小節(jié)先介紹6個(gè)通用選項(xiàng):
面向用戶角度來(lái)顯示進(jìn)程狀況,其中的%CPU、%MEM、VSZ和RSS字段都是非常常用的信息。
采用詳細(xì)格式顯示進(jìn)程狀況,此類選項(xiàng)所顯示字段主要為一些常用字段信息。
采用完整格式顯示進(jìn)程狀況,此類選項(xiàng)所顯示字段同樣為一些常用字段信息。
6.2、字段組合類專用選項(xiàng)
本小節(jié)先介紹9個(gè)適合特殊用途的專用選項(xiàng):
采用作業(yè)(job)控制的格式顯示進(jìn)程狀況,字段PPID、PID、PGID、SID和TPGID都是此選項(xiàng)的關(guān)鍵信息。
采用舊式的linux i386寄存器格式顯示進(jìn)程狀況,很明顯此選項(xiàng)特點(diǎn)是STACKP、ESP和EIP這些寄存器信息。
Linux或sunos操作系統(tǒng)中會(huì)額外增加PSR字段的顯示,PSR字段是指當(dāng)前進(jìn)程被調(diào)度到的CPU核序號(hào)。
采用程序信號(hào)的格式顯示進(jìn)程狀況,此選項(xiàng)特色字段是PENDING、BLOCKED、IGNORED和CAUGHT字段。很顯然,當(dāng)我們進(jìn)行l(wèi)inux信號(hào)編程時(shí),使用此選項(xiàng)非常有用。
采用虛擬內(nèi)存的角度顯示進(jìn)程狀況,此選項(xiàng)特色字段包括MAJFL、TRS、DRS、RSS和%MEM。
打印操作系統(tǒng)強(qiáng)制訪問(wèn)控制(SELinux)的安全標(biāo)簽信息,此選項(xiàng)特點(diǎn)是LABEL字段信息。
也許有人已經(jīng)觀察到了,以上字段組合選項(xiàng),不論哪個(gè)都會(huì)固定的有幾個(gè)字段總是出現(xiàn),比如PID、TTY、TIME和CMD等。下面請(qǐng)大家先看一下這幾個(gè)例子。
從以上例子中,我們可以得出幾個(gè)信息。參數(shù)為BSD風(fēng)格時(shí),默認(rèn)都會(huì)顯示PID、TTY、STAT、TIME和COMMAND這5個(gè)字段。參數(shù)為SYSV風(fēng)格時(shí),默認(rèn)都會(huì)顯示PID、TTY、TIME和CMD這4個(gè)字段。ps命令無(wú)參數(shù)時(shí)默認(rèn)為SYSV風(fēng)格。
6.3、自定義字段選項(xiàng)
上一小節(jié)字段組合選項(xiàng)是ps命令為了一些常用場(chǎng)景固化在代碼中的固定數(shù)據(jù)項(xiàng)組合。但是如果以上所有組合都不滿足我們的要求,或者我們?yōu)榱颂嵘齪s命令運(yùn)行效率僅僅需要個(gè)別的數(shù)據(jù)項(xiàng)輸出。那么我們可以通過(guò)-o或o選項(xiàng)來(lái)實(shí)現(xiàn)自定義數(shù)據(jù)項(xiàng)的輸出功能。比如我們對(duì)ps j這個(gè)命令字段組合的輸出信息不滿意,我們自定義他的輸出。
前文提到過(guò),ps命令一共可以輸出168個(gè)字段,ps L命令可以顯示這168個(gè)字段的詳細(xì)情況。第一列小寫(xiě)字母是-o選項(xiàng)的參數(shù),可以通過(guò)逗號(hào)隔開(kāi)。第二列大寫(xiě)字母是ps命令輸出的結(jié)果集標(biāo)題欄名稱。
盡管大部分情況下-o參數(shù)和標(biāo)題欄都僅僅是大小寫(xiě)的轉(zhuǎn)換關(guān)系,但也有不那么完美的時(shí)候,以進(jìn)程的執(zhí)行命令字段為例。
這個(gè)例子至少可以說(shuō)明兩點(diǎn),不同的說(shuō)明符(specifier,-o選項(xiàng)參數(shù))可能輸出同樣的標(biāo)題欄。盡管標(biāo)題欄一樣,但顯示的內(nèi)容可能是有區(qū)別的。
有些說(shuō)明符還提供縮寫(xiě),下表是ps命令有縮寫(xiě)的說(shuō)明符和縮寫(xiě)的對(duì)應(yīng)關(guān)系表,一共15個(gè)。
有了說(shuō)明符的縮寫(xiě)之后,可以對(duì)自定義字段的輸出字段之間添加自定義分隔符。區(qū)別于以往ps命令各輸出字段都是使用空格作為分割,使用自定義分隔符之后將更方便使用shell數(shù)據(jù)處理命令進(jìn)行解析。
前文提到所有字段組合選項(xiàng)都默認(rèn)包含4個(gè)或5字段。如果想在自定義字段組合時(shí)也默認(rèn)添加一些常用字段,而同時(shí)又省去-o選項(xiàng)參數(shù)的輸入過(guò)程,那么可以使用O或-O選項(xiàng)。
這2個(gè)選項(xiàng)O或-O,會(huì)在自定義字段之前默認(rèn)增加pid字段,在自定義字段之后默認(rèn)增加state、tname、time和command字段。
七、Linux ps命令字段修飾選項(xiàng)
本節(jié)前面的選項(xiàng)都是決定輸出結(jié)果中字段的數(shù)量和順序,本小節(jié)將介紹幾個(gè)只對(duì)輸出結(jié)果中某個(gè)字段進(jìn)行修飾的選項(xiàng)。首先來(lái)看-w和w選項(xiàng)。
這個(gè)實(shí)例說(shuō)明,當(dāng)屏幕不是很寬時(shí),如果進(jìn)程命令很長(zhǎng),默認(rèn)情況下,會(huì)將命令超出屏幕的部分截取掉,這樣勢(shì)必會(huì)影響系統(tǒng)管理員調(diào)查問(wèn)題,使用w或-w選項(xiàng),就會(huì)將完整的進(jìn)程命令信息顯示,多出的部分換行顯示。有的時(shí)候?yàn)榱诵Ч靡稽c(diǎn),建議我們可以多使用幾次w選項(xiàng),比如ww、www或wwww。
接下來(lái)我們?cè)賮?lái)看一下c和e選項(xiàng)。
選項(xiàng)u的COMMAND字段,默認(rèn)會(huì)輸出進(jìn)程路徑和執(zhí)行參數(shù)信息。從上面的例子可以看出,選項(xiàng)c可以使選項(xiàng)u的COMMAND字段更加精簡(jiǎn),只保留進(jìn)程名稱。選項(xiàng)e可以使選項(xiàng)u的COMMAND字段更加豐富,增加進(jìn)程環(huán)境變量的相關(guān)內(nèi)容。
當(dāng)選項(xiàng)S被選中,ps命令在顯示如下6個(gè)字段信息時(shí),會(huì)將已經(jīng)死亡的子進(jìn)程信息也包含計(jì)算在內(nèi),如果未選中S選項(xiàng)將不會(huì)計(jì)算這些已經(jīng)死亡的子進(jìn)程信息 。快速同時(shí)執(zhí)行如下2個(gè)命令,即可看出這6個(gè)字段值,選中S值后比之前有明顯增大。具體字段含義請(qǐng)參考8.5小節(jié)和8.6小節(jié)。
Linux ps命令的字段中有個(gè)wchan字段(wchan相關(guān)含義參考8.8小節(jié))。默認(rèn)情況下ps命令會(huì)輸出wchan的符號(hào)信息,如果希望輸出wchan的原始數(shù)值信息,可以使用n選項(xiàng)。請(qǐng)比較如下2個(gè)命令,添加n選項(xiàng)前后第11個(gè)字段的輸出差別。除了wchan之外,選項(xiàng)n還可以將原本輸出user name的地方轉(zhuǎn)換為user id輸出。
字段wchan的數(shù)值信息和符號(hào)信息的映射關(guān)系通過(guò)操作系統(tǒng)中一些System.map文件完成,如果用戶需要使用自定義的System.map文件,可以通過(guò)選項(xiàng)N或-n完成,如下示例。
八、Linux ps命令常用字段
前文提到linux ps一共最多可以輸出168個(gè)字段,通過(guò)ps L命令可獲取詳情。通過(guò)字段相關(guān)選項(xiàng)可以獲取符合用途的字段組合。為了讓大家對(duì)ps命令的理解更加深入,本節(jié)會(huì)深入介紹一些常用的輸出字段的含義。
按照這些常用字段的內(nèi)在關(guān)系,我們將分為以下八個(gè)小結(jié)介紹。
8.1、進(jìn)程ID類字段
進(jìn)程ID類字段是ps命令字段中最基礎(chǔ)的一類。為了能更加形象的說(shuō)明這些ID的關(guān)系和含義,請(qǐng)大家按照如下命令順序操作。
對(duì)以上輸出結(jié)果的字段逐條說(shuō)明:
字段tid表示進(jìn)程的線程ID,可以看出每個(gè)線程的tid都不相同。
字段nlwp表示當(dāng)前線程組中的線程個(gè)數(shù),以上命令都是單線程進(jìn)程,因此此值均為1。
字段pid表示進(jìn)程ID,也可以看出每個(gè)進(jìn)程的PID都不相同。
字段pgid表示進(jìn)程組ID,上面的例子中除了和setsid結(jié)合的vmstat命令,其余三組通過(guò)shell管道連接起來(lái)的命令的pgid都相同。比如tail、awk和nl命令的- pgid都為1384,且pgid值為組內(nèi)第一個(gè)命令tail的pid值;iostat、sed和fold命令的pgid都為1388,且pgid值為組內(nèi)第一個(gè)命令iostat的pid值。
字段sid表示會(huì)話ID。上面的例子中最后一行是第三個(gè)登錄終端的shell。第一個(gè)登錄終端上的所有進(jìn)程sid都相同,且為登錄shell的pid值1351;除了和set- sid結(jié)合的vmstat命令,第二個(gè)終端上的所有進(jìn)程sid都相同,且為登錄shell的pid值1394。
字段tpgid表示進(jìn)程連接到的tty(終端)所在的前臺(tái)進(jìn)程組的ID。除了vmstat進(jìn)程之外,第二個(gè)終端上的所有進(jìn)程tpgid也都等于登錄shell的pid值1394。但是第一個(gè)終端上的所有進(jìn)程tpgid卻都等于第一個(gè)終端上又啟動(dòng)的那個(gè)shell的進(jìn)程id值1370。充分說(shuō)明了tpgid值是鏈接著終端的前臺(tái)進(jìn)程組ID值。
字段ppid表示父進(jìn)程ID。
最后我們?cè)賮?lái)解釋和vmstat結(jié)合的setsid,setsid就是使和它結(jié)合的vmstat脫離原來(lái)的會(huì)話,脫離之后pgid和sid都等于了vmstat進(jìn)程的pid,同時(shí)父進(jìn)程也由1號(hào)進(jìn)程托管。此時(shí)也沒(méi)有了所依附的終端,tpgid統(tǒng)一等于-1。Linux上的所有守護(hù)進(jìn)程的tpgid值都是-1。
進(jìn)程ID類字段的別名情況:字段spid和字段lwp是字段tid的別名,字段tgid是字段pid的別名,字段pgrp是字段pgid的別名,字段sess和字段session是字段sid的別名。
8.2、命令名字段
命令名相關(guān)的字段一共有3組,如下所示。
命令名字段的別名情況:字段comm和字段ucomm是字段ucmd的別名,字段args和字段command是字段cmd的別名。
建議大家掌握ucmd和cmd這2個(gè)字段,cmd為長(zhǎng)命令名字段,ucmd為短命令名字段,可以理解為unadorned cmd(未加修飾的命令名)。
前文提到過(guò)如果程序名稱長(zhǎng)度超過(guò)15位,ps命令的短命令名無(wú)法完整顯示16位及以上的部分。下面看一個(gè)小例子來(lái)說(shuō)明這個(gè)問(wèn)題。
從上面的例子可以看出,當(dāng)程序名稱超過(guò)15位時(shí),確實(shí)短命令名無(wú)法顯示完整的程序名稱,只顯示了15位。進(jìn)一步查看/proc/8040/目錄,可以發(fā)現(xiàn)如下信息。
查詢內(nèi)核代碼,可以發(fā)現(xiàn)comm值取自內(nèi)核struct task_struct結(jié)構(gòu)體的comm屬性字段。
這就告訴我們通過(guò)ps命令短命令字段無(wú)論如何都無(wú)法輸入超過(guò)15位的程序名稱,原因是內(nèi)核數(shù)據(jù)結(jié)構(gòu)原生就只支持15個(gè)字符長(zhǎng)度的程序名稱。
除此之外上面的例子還給我們另外一個(gè)啟示,如果通過(guò)使用SYSV風(fēng)格的短命令名就可以滿足使用要求(如ps -el),那就盡量不要使用BSD風(fēng)格的長(zhǎng)命令名(如ps -e u,即ps aux)。長(zhǎng)命令名需要依賴內(nèi)核中健康的文件系統(tǒng),而當(dāng)文件系統(tǒng)工作不正常時(shí),往往短命令名卻可以不受影響。所以我們?cè)趯?shí)際生產(chǎn)中偶爾會(huì)發(fā)現(xiàn)系統(tǒng)中有大量ps aux進(jìn)程D住的情況。
8.3、進(jìn)程狀態(tài)字段
進(jìn)程狀態(tài)類字段一共有三個(gè),分別是s、state和stat,如下所示。
字段s和state互為別名,值為單字節(jié)進(jìn)程狀態(tài)。這里重點(diǎn)介紹一下stat選項(xiàng)的多字節(jié)進(jìn)程狀態(tài),查看一下ps命令關(guān)于這個(gè)多字節(jié)進(jìn)程狀態(tài)的c語(yǔ)言代碼。
根據(jù)以上源代碼,我們來(lái)逐條解釋:
字符’
字符’N’表示nice值大于0,nice值最大為19。因此字符’N’表示此進(jìn)程可能在調(diào)度過(guò)程中不能獲得優(yōu)勢(shì)。
字符’L’表示進(jìn)程vm_lock值為真,即此進(jìn)程有內(nèi)存頁(yè)被鎖在內(nèi)存中,這些內(nèi)存頁(yè)不能通過(guò)換頁(yè)換出。
字符’s’表示進(jìn)程的tgid(pid)值等于進(jìn)程的session(sid)值,這說(shuō)明當(dāng)前進(jìn)程是會(huì)話的leader,參考8.1小節(jié)。
字符’l’表示進(jìn)程中的線程數(shù)量大于1,這說(shuō)明當(dāng)前進(jìn)程是一個(gè)多線程程序。
字符’+’表示進(jìn)程的pgrp(pgid)值等于進(jìn)程的tpgid前臺(tái)進(jìn)程組ID,這表示當(dāng)前進(jìn)程在前臺(tái)進(jìn)程組中。8.4、時(shí)鐘(系統(tǒng))時(shí)間類字段
時(shí)鐘時(shí)間(系統(tǒng)時(shí)間)類字段,記錄了進(jìn)程開(kāi)始時(shí)間點(diǎn)和執(zhí)行的時(shí)長(zhǎng)信息,這類字段一共有6組。其中4個(gè)記錄進(jìn)程開(kāi)始時(shí)間點(diǎn),2個(gè)記錄進(jìn)程執(zhí)行時(shí)長(zhǎng)信息,示例如下。
從自動(dòng)化運(yùn)維腳本的角度,lstart字段的輸出信息格式更加規(guī)范便于解析,etimes字段作為一個(gè)正整數(shù)也可以直接使用。字段start_time是字段stime的別名。下面給一個(gè)使用的例子。
字段lstart的輸出固定占用了2 2 6這5列信息,這樣在其后的etimes字段也固定占用了第$7列。使用awk結(jié)合date命令很方便的就將進(jìn)程開(kāi)始時(shí)間轉(zhuǎn)化為時(shí)間戳格式。
8.5、CPU時(shí)間和使用率字段
CPU時(shí)間和使用率類字段一共有5組,記錄了進(jìn)程所消耗的CPU時(shí)間片和CPU使用率信息,示例如下。
字段bsdtime的輸出相比較cputime更加方便轉(zhuǎn)換為正整數(shù)的秒數(shù)。字段cp的單位是千分比,不能超過(guò)999。字段c是百分比,不能超過(guò)99。
進(jìn)程CPU時(shí)間類字段別名:字段atime和字段time是字段cputime的別名;字段util是字段c的別名;字段%cpu是字段pcpu的別名,但是%字符在crontab中使用并不友好,推薦使用pcpu。
下面來(lái)說(shuō)明一下ps命令的CPU利用率的含義,先運(yùn)行一個(gè)例子。
從這個(gè)命令運(yùn)行的結(jié)果可以看出bsdtime除以etimes的值轉(zhuǎn)換為百分比后,基本和pcpu的值相等。這就足以說(shuō)明ps命令的CPU利用率字段指標(biāo)是指從進(jìn)程開(kāi)始運(yùn)行以來(lái)進(jìn)程所耗費(fèi)的CPU時(shí)間片占時(shí)鐘時(shí)間的百分比。有時(shí)候這個(gè)值大于100%,那是因?yàn)檫M(jìn)程啟用了多線程,很多時(shí)候有多核在同時(shí)使用CPU時(shí)間片。
看過(guò)top命令源碼可以知道,top命令默認(rèn)是取最近3秒鐘進(jìn)程所耗費(fèi)的CPU時(shí)間片除以3秒鐘的百分比值。我們可以設(shè)想一種場(chǎng)景,如果一個(gè)進(jìn)程已經(jīng)運(yùn)行了1年以上,平時(shí)都很穩(wěn)定。
但是剛剛就在十幾分鐘前突然運(yùn)行大量線程,占用大量CPU資源。結(jié)果你在你剛剛登陸系統(tǒng)之前10秒鐘這些運(yùn)行的線程都結(jié)束了。那么你不論是通過(guò)top命令的CPU利用率指標(biāo),還是ps命令的CPU利用率指標(biāo)都無(wú)法發(fā)現(xiàn)剛才作怪的這個(gè)線程的跡象。
8.6、進(jìn)程內(nèi)存相關(guān)字段
進(jìn)程內(nèi)存相關(guān)字段也ps命令字段中非常重要的一類,主要分為如下9組,示例如下。
對(duì)以上輸出結(jié)果的字段逐條說(shuō)明:
字段vsz(virtual memory size)表示進(jìn)程所申請(qǐng)的虛擬地址空間的內(nèi)存大小,單位KB。在64位系統(tǒng)中,每個(gè)進(jìn)程都有128Tb大小的堆內(nèi)存虛擬地址空間的內(nèi)存空間大小。vsz值并不反映進(jìn)程占用的真正物理內(nèi)存大小。
字段rss(resident set size)表示進(jìn)程真正占用了的物理內(nèi)存大小,單位KB。
字段pmem表示進(jìn)程占用的物理內(nèi)存大小(rss)占本機(jī)總物理內(nèi)存大小百分比。
字段trs(text resident set size)表示用于可執(zhí)行代碼的物理內(nèi)存大小,約等于進(jìn)程的程序尺寸大小。
字段drs(data resident set size)表示可執(zhí)行代碼之外的內(nèi)存大小,實(shí)際基本等于vsz減去trs的值。
字段size表示如果進(jìn)程交換到磁盤(pán)所需的交換空間大小。
字段sz表示進(jìn)程在物理頁(yè)面中的核心鏡像的大小。
字段minflt表示此進(jìn)程中發(fā)生的次缺頁(yè)異常的數(shù)量,下面詳細(xì)介紹。
字段majflt表示此進(jìn)程中發(fā)生的主缺頁(yè)異常的數(shù)量。
進(jìn)程內(nèi)存相關(guān)字段別名:字段m_drs和字段dsiz是字段drs的別名,字段vsize是字段vsz的別名,字段m_size是字段sz的別名,字段rssize、字段rsz和字段sgi_rss是字段rss的別名,字段m_trs、字段trss和字段tsiz是字段trs的別名,字段%mem是字段pmem的別名,字段min_flt是字段minflt的別名,字段maj_flt和字段pagein是字段majflt的別名。
下面通過(guò)一個(gè)例子來(lái)加深對(duì)缺頁(yè)異常的理解。
可以看出字段rss和字段minflt的比值趨近于4。操作系統(tǒng)管理內(nèi)存的基本單元是4096字節(jié)大小的頁(yè)框,當(dāng)進(jìn)程訪問(wèn)尚未有物理內(nèi)存建立頁(yè)表映射關(guān)系的虛擬內(nèi)存地址值時(shí),會(huì)產(chǎn)生一次缺頁(yè)異常。在缺頁(yè)異常處理過(guò)程中會(huì)為虛擬內(nèi)存頁(yè)分配一個(gè)物理內(nèi)存頁(yè)并建立映射。
所以每一次缺頁(yè)異常就會(huì)分配4096(4kb)字節(jié)的物理內(nèi)存,這樣rss和minflt的比值當(dāng)然就是4了。如果分配之后又有釋放,后面再次分配,會(huì)使這個(gè)比值逐步小于4。如果這個(gè)比值過(guò)于小,那我們就有充足理由懷疑用戶程序代碼在內(nèi)存管理上存在重大問(wèn)題。
8.7、進(jìn)程憑證類字段
進(jìn)程憑證類字段一共有30多個(gè),其中大部分可以匯總為如下表格。
其中有些憑證是另外憑證的別名,比如uid是euid的別名,svuid是suid的別名,fsuid是fuid的別名。因此這些憑證字段簡(jiǎn)單的可以歸納為如下4方面憑證:
實(shí)際憑證 (real user ID):一般表示進(jìn)程的創(chuàng)建者,屬于哪個(gè)用戶創(chuàng)建。
有效憑證 (effective user ID):表示進(jìn)程對(duì)于文件和資源的訪問(wèn)權(quán)限,具備等同于哪個(gè)用戶的權(quán)限。
保護(hù)憑證 (saved set-user-ID):set-user-ID的保存ID。
文件系統(tǒng)憑證 (file-system user ID):已經(jīng)基本廢棄。8.8、WCHAN字段
WCHAN類字段一共3個(gè)nwchan、wchan和wname。WCHAN就是waiting channel的意思,進(jìn)程正在休眠的內(nèi)核函數(shù)的函數(shù)符號(hào)名稱。R狀態(tài)進(jìn)程此字段值為“-”。
字段wchan和wname都顯示的是內(nèi)核函數(shù)的函數(shù)符號(hào)名稱信息,默認(rèn)只顯示6個(gè)字節(jié)。如果希望顯示完整的函數(shù)名稱,可以通過(guò)在字段名稱后加冒號(hào)再加寬度數(shù)值的方式顯示更豐富信息,即wchan:25。
字段nwchan顯示的是內(nèi)核函數(shù)符號(hào)的指針地址數(shù)值信息。一個(gè)完整的64位的內(nèi)核函數(shù)指針地址是一個(gè)16位的十六進(jìn)制值,前10位固定為’ffffffff81’,因此ps命令的nwchan字段只顯示出了后6位的十六進(jìn)制值。
比如指針地址是ffffffff8124bb7e,那么nwchan顯示24bb7e。如果后6位的高位有0,則省略掉0的顯示。
九、Linux ps命令選項(xiàng)容錯(cuò)機(jī)制
Linux ps命令所有的選項(xiàng)和大多數(shù)字段都解釋過(guò)了,現(xiàn)在該說(shuō)說(shuō)文章開(kāi)頭那個(gè)報(bào)錯(cuò)的ps -axu了。
ps命令會(huì)提供一種選項(xiàng)容錯(cuò)機(jī)制。當(dāng)用戶輸入的是一個(gè)SYSV風(fēng)格參數(shù)組合后,如果參數(shù)解析失敗,ps命令會(huì)繼續(xù)嘗試把同樣的字母組合都轉(zhuǎn)換為BSD風(fēng)格再嘗試進(jìn)行一次解析。
比如ps -aux解析失敗后嘗試按ps aux解析,ps -x解析失敗后嘗試按ps x解析。當(dāng)然了,如果再次按照BSD風(fēng)格嘗試解析仍失敗,那ps命令會(huì)最終失敗報(bào)錯(cuò)。
事實(shí)上,能有機(jī)會(huì)被ps命令容錯(cuò)機(jī)制糾正的錯(cuò)誤選項(xiàng)只有這7個(gè),-S、-X、-h、-k、-v、-r和-x。因?yàn)檫@些字母雖然沒(méi)有SYSV風(fēng)格的選項(xiàng),但是卻都有BSD風(fēng)格的選項(xiàng)。
最后說(shuō)一下,沒(méi)有將BSD風(fēng)格到SYSV風(fēng)格的容錯(cuò)機(jī)制,比如SYSV風(fēng)格有-F選項(xiàng),而B(niǎo)SD風(fēng)格沒(méi)有F選項(xiàng)。運(yùn)行命令ps F還是會(huì)報(bào)錯(cuò)。
十、Linux ps命令綜合解析 10.1、常用選項(xiàng)摘要
本文對(duì)linux ps命令的104個(gè)短選項(xiàng)都進(jìn)行了說(shuō)明,其中只有一部分選項(xiàng)比較常用,下面根據(jù)我的經(jīng)驗(yàn)推薦給大家重點(diǎn)關(guān)注:
選項(xiàng)-e:顯示所有進(jìn)程的記錄,記住這個(gè)參數(shù)就可以保證把當(dāng)前系統(tǒng)的所有進(jìn)程都輸出。需要篩選進(jìn)程時(shí),可以結(jié)合grep等文本處理命令實(shí)現(xiàn)目的。 選項(xiàng)h:選中時(shí)可以隱藏輸出結(jié)果的標(biāo)題欄信息,在一些自動(dòng)化腳本中使用此參數(shù)可以去除頁(yè)頭信息。
選項(xiàng)k:通過(guò)此選項(xiàng)可以實(shí)現(xiàn)對(duì)輸出結(jié)果的排序。
選項(xiàng)-L:通過(guò)此選項(xiàng)可以把多線程的進(jìn)程展開(kāi)每個(gè)線程的細(xì)顆粒度。
選項(xiàng)-l:或選項(xiàng)l,此選項(xiàng)可以列出進(jìn)程的最基本信息,包括s、pid、ppid、time和ucmd等字段信息。
選項(xiàng)u:此選項(xiàng)可以列出cpu使用率、mem使用率、rss內(nèi)存等字段信息。
選項(xiàng)-o:或選項(xiàng)o,通過(guò)此選項(xiàng)可以自定義輸出符合自己需求的字段信息。
Linux ps命令的168個(gè)輸出字段,我們也對(duì)大部分進(jìn)行了介紹。下面根據(jù)經(jīng)驗(yàn)推薦給大家一些常用的關(guān)注。
結(jié)語(yǔ)
Linux ps命令博大精深,以上內(nèi)容可能不一定完整。如果大家覺(jué)得文章中有任何補(bǔ)充,請(qǐng)加群反饋信息。如果你對(duì)ps命令使用還有其他疑問(wèn),也歡迎加群答疑。
原文鏈接:值得收藏,史上最全Linux ps命令詳解,轉(zhuǎn)自AliDataOps 公眾號(hào),作者聞茂泉。
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的centos7中ps显示的内容_值得收藏,史上最全Linux ps命令详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: VMware15安装MAC OS X10
- 下一篇: Linux文件管理小测试