2014-09-19

programs watch and ps

在 linux 中 ps 這指令我想大家都很熟悉,但是指定輸出某些資訊,我想就比較少人在用,我也是因為要監看某個一直當掉的程式的 cpu 、memory、command 才特別去學會的。另外加上 watch 就變成動態監看變化相當好用。




先介紹 pgrep 吧,要知道某個程式的 pid 大家常用的都是 ps aux | grep programs | grep -v grep 類似的東西吧,其實用 pgrep 比較簡易
pgrep programs
pgrep amule
4610


但是要注意要完整符合 programs 要用 pgrep ^programs$ 哦,不然就會像這樣要找 amuled 只用 amule 找但實際上不是我所要的。
pgrep amule
4650


pgrep ^amuled$
4650


^放在開頭、$放在結尾別搞反了

好了,現在來將 ps 跟 pgrep 組合起來應用,pgrep 只輸出 pid 但沒有如 cpu 等資訊,那就需要兩個搭配起來用。
ps -p $(pgrep ^programs$) -o %cpu,%mem,cmd

ps -p $(pgrep ^amule$) -o %cpu,%mem,cmd
%CPU %MEM CMD
5.8 1.9 /usr/bin/amule


上面是靜態輸出的不會隨時際情形而變化,另在加上 watch 就能產生動態的資訊哦。

你看同個 pid 輸出的資訊會是隨著時間實際情形而有所不同

Every 2.0s: ps -p 4866 -o %cpu,%mem,cmd Fri Sep 19 12:50:13 2014
%CPU %MEM CMD
4.9 1.9 /usr/bin/amule

Every 2.0s: ps -p 4866 -o %cpu,%mem,cmd Fri Sep 19 12:50:30 2014
%CPU %MEM CMD
5.2 2.0 /usr/bin/amule
兩個是同個指令截取兩段時間點,你實際看到的是

補充說明


  • ps -o 可輸出資訊如下圖
  • pgrep 只取得最新的 programs pid 要用 -n 參數