From聞茂泉(廣成)AliDataOps
??大概在十多年前,我當(dāng)時還是一個產(chǎn)品經(jīng)理。由于一些工作的原因,需要向運維工程師學(xué)習(xí)一些linux常用命令。當(dāng)使用linux ps這個十分常用的命令時,遇到了一個小小的疑惑。有些工程師推薦使用ps aux的命令組合,有些工程師推薦使用ps -aux的命令組合,從輸出結(jié)果上來看似乎也沒有什么不同。考慮到如常用的ls -l命令在內(nèi),很多l(xiāng)inux命令選項前都要加上一個短橫線,這么來看似乎ps -axu是正確的。但是一些早期的linux版本,在執(zhí)行ps -axu時又會報出如下錯誤Warning: bad syntax,而ps aux卻沒有這樣的報錯信息,這么看來似乎ps aux又是正確的。查閱市面上的一些linux書籍,在介紹linux ps命令示例時,有些說用ps aux,而有些又說用ps -axu。實在是讓我這個初學(xué)者摸不著頭腦。
再后來,隨著我加入運維團隊對linux ps命令逐步深入使用,學(xué)會了查看man page和help,發(fā)現(xiàn)其中有ps命令的exmaple,果然是ps aux的用法是正確的。不過隨著對linux ps命令使用的逐步深入,對ps命令的其他疑問越來越多。比如,我們天天在使用ps命令時輸出的%CPU列到底是什么含義?為什么和top顯示的%CPU的值有時候差異非常大?再比如,當(dāng)我使用ps -el命令時,為什么我的進程名是systemd-journald,而ps命令只顯示systemd-journal,弄丟了最后1個字母d。
帶著這么多疑惑,3年多前我有機會簡單的學(xué)習(xí)了一下linux ps源代碼,逐步解開了上面這些疑惑。后來發(fā)現(xiàn)公司的很多同事也對ps命令有各種問題和疑問,于是想把之前對ps命令的學(xué)習(xí)經(jīng)驗總結(jié)成文檔,供大家參考。希望能給大家?guī)韼椭?/p>
Linux ps命令功能很強大,了解ps命令首先需要從ps命令的選項格式入手。像其他很多l(xiāng)inux shell命令一樣,ps命令的選項也有長格式和短格式的區(qū)別。短選項中也可以帶中橫線、也可以不帶中橫線。
根據(jù)選項長短和是否有橫線的情況,ps命令的選項可以分為以下3類:
不過linux ps命令的長選項并不多,而且?guī)缀趺總長選項都有一個功能完全相同的短選項對應(yīng)。在centos7環(huán)境運行如下命令可以見。
在本文中我們將主要介紹BSD和SYSV兩種風(fēng)格的ps命令選項。如果大家有對GNU風(fēng)格的長選項使用的需求,那么可以參考對應(yīng)的短選項語法即可。需要注意的是GNU風(fēng)格選項都是帶參數(shù)值的,例如--sid 1。
各風(fēng)格的ps命令選項可以混合使用,比如:
Linux ps命令解析SYSV和BSD風(fēng)格選項時,會分別將每組字符串都解析成單獨的字母。以下三個實例,拆分前后的命令都是等價的。
從示例中可以看出,當(dāng)SYSV風(fēng)格語法一個中橫線之后有多個字母選項時,拆分后需要給每一個字母前都加上一個中橫線。也就是說-elL轉(zhuǎn)換為-e -l -L,而不是轉(zhuǎn)換為-e l L。
從上面例子中也可以看出,ps命令選項除了有是否加中橫線的區(qū)別,字母大小寫也表現(xiàn)為不同的選項含義。英文字母一共26個,SYSV風(fēng)格選項-A到-Z和-a到-z共52個,BSD風(fēng)格選項A到Z和a到z共52個。于是ps命令就有一共104個命令選項可能性。
不同版本的ps命令選項的使用可能略有出入,本文主要使用主流的centos7上的procps-ng version 3.3.10版本來說明。在這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。