此ps非某ps。
阿拉說的是linux裏歷史悠久,運維人員人人愛的ps,不是攝影相關的那個喲。不管哪個,都能讓人渾身難受,外加回想起某次加班到深夜的慘痛經歷。懂的懂的,阿拉過去也是差點成爲設計狗,沒想到跳出那個ps的坑,還有這個ps等着我。
好奇戳進來的萌寶寶們就姑且當個故事看下去吧。如果姑且不會覺得不耐煩的話。
但願搜索引擎足夠強大。讓阿拉的文章也去非專業的領域漏漏臉。
此ps是processes的簡寫。linux裏這種簡寫的命令還不少呢。有時候出現首字母簡寫的反而讓人覺得不舒服,比如usr,阿拉相當長的一段時間都認爲那是user的縮寫,然而,事實上,那更多的可能是Unix System Resource。爲什麼說可能呢?嗨,最初的時候這個目錄下放的的確是用戶信息,後來有/home了,這傢伙就漸漸成爲了系統類文件夾,也有說是unix software resources的縮寫的。
看吧,就算是IT行業,也不是凡事都有標準的。嘛,理解成技術人員的幽默的話你也算是個及格的初學者了。
processes顧名思義,就是進程。話說英語好學IT真的是個助力啊。
不好也沒關係。學linux還能提升英語素養。一套完整的課程下來,說不定四級就能過了呢。
正題,咳咳。
單敲ps顯示當前終端下正在運行的進程。
[root@centos7 usr]# ps PID TTY TIME CMD 6262 pts/1 00:00:00 bash 9032 pts/1 00:00:00 ps
第一行有PID、TTY的選項,這個我們下面再說。
ps後可以跟選項,所跟的選項有三種格式——UNIX格式、BSD格式、GNU格式。一般掌握一種格式的也就夠用了。關於爲什麼有這麼多格式,可以歸結爲——這個命令的歷史太悠久了。有多悠久呢?
差不多UNIX誕生之初就有了。UNIX誕生於1970年,所以後來分支出的BSD派系和GNU開源LInux都承繼了這一命令。阿拉最常使用的CentOS系列命令選項有長選項和短選項之分,短選項對應UNIX格式,長選項對應的,就是GNU格式了。短選項方便,對於初學者卻很容易搞混。長選項對英語不好的是個挑戰吶。來吧,提高英語能力的機會來了,哈哈。
鑑於英語好的都去直接man ps查看幫助文檔了。這裏阿拉就省略很少使用,啊不,是基本不用的GUN格式了。
下面是兩種格式格式常用的選項。
UNIX格式選項:
a 顯示當前主機所有終端
x 包括和終端無關的進程(守護進程)
u 顯示所有者(進程的USER——生效的用戶名)
f 縮進顯示父子進程
o 指定顯示字段
k|--sort 排序(按指定選項)
舉個例子:
ps axo pid,cmd,%cpu,%mem 顯示當前主機下所有進程,僅顯示pid、cmd、%cpu、%mem字段
[root@centos6 ~]# ps axo pid,cmd,%cpu,%mem PID CMD %CPU %MEM 1 /sbin/init 0.5 0.0 2 [kthreadd] 0.0 0.0 3 [migration/0] 0.0 0.0 4 [ksoftirqd/0] 0.0 0.0 5 [stopper/0] 0.0 0.0 6 [watchdog/0] 0.0 0.0 7 [events/0] 0.2 0.0 8 [events/0] 0.0 0.0 9 [events_long/0] 0.0 0.0 10 [events_power_ef] 0.0 0.0 11 [cgroup] 0.0 0.0 12 [khelper] 0.0 0.0 13 [netns] 0.0 0.0 14 [async/mgr] 0.0 0.0 15 [pm] 0.0 0.0 16 [sync_supers] 0.0 0.0 17 [bdi-default] 0.0 0.0 18 [kintegrityd/0] 0.0 0.0 .......(以下省略)
當我們加上f選項時,我們會看到更多的信息。
[root@centos6 ~]# ps auxf USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 2 0.0 0.0 0 0 ? S 03:22 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 03:22 0:00 \_ [migrat] root 4 0.0 0.0 0 0 ? S 03:22 0:00 \_ [ksofti] root 5 0.0 0.0 0 0 ? S 03:22 0:00 \_ [stoppe] root 6 0.0 0.0 0 0 ? S 03:22 0:00 \_ [watchd] root 7 0.2 0.0 0 0 ? S 03:22 0:01 \_ [events] root 8 0.0 0.0 0 0 ? S 03:22 0:00 \_ [events] root 9 0.0 0.0 0 0 ? S 03:22 0:00 \_ [events] root 10 0.0 0.0 0 0 ? S 03:22 0:00 \_ [events] root 11 0.0 0.0 0 0 ? S 03:22 0:00 \_ [cgroup] root 12 0.0 0.0 0 0 ? S 03:22 0:00 \_ [khelpe] root 13 0.0 0.0 0 0 ? S 03:22 0:00 \_ [netns] root 14 0.0 0.0 0 0 ? S 03:22 0:00 \_ [async/] root 15 0.0 0.0 0 0 ? S 03:22 0:00 \_ [pm] root 16 0.0 0.0 0 0 ? S 03:22 0:00 \_ [sync_s] root 17 0.0 0.0 0 0 ? S 03:22 0:00 \_ [bdi-de] root 18 0.0 0.0 0 0 ? S 03:22 0:00 \_ [kinteg] ...........(以下省略)
事實上,使用o選項時,能指定的還有pid、comm、%cpu、%mem、stat、tty、euser、ruse、euid、ruid、tpgid、sess、pgrp、ppid、pcpu、tid、class、rtprio、ni、pri、psr。嘿嘿,這些用到的時候再man就可以了。知道常用的含義就足夠了。
linux學習就像在讀一本厚厚的字典,知道使用方法比背下來要輕鬆的多,也有用的多。畢竟背字典吶,對很多人來說都沒有必要的啊。有背下的大神,且受阿拉一拜。現充去死啊!!!
抱歉,失禮了。IT設計面太廣,要真的抓不住重點,想到哪裏學到哪裏會吃大虧的。阿拉之前不承認,現在……
阿拉沒什麼故事,只是勉強比常人多了點發叉的腦神經罷了。有段時間阿拉會爲老師佈置的題目糾結。比如這個http://amelie.blog.51cto.com/12850951/1953359。真正煩的,筆墨根本寫不出十分之一。啊啊,那句話說的很好呢——我只是發現了一千條行不通的路。越長大越發現沒有絕對的正確,其中的差距呢,如果你覺得還好,那就這樣吧。阿拉的不值一提的小毛病,關鍵時刻卻誤事的很呢。阿拉想要導向正確答案的能力。而這能力,永遠有可進步的餘地。
如何儘快從牛角尖裏鑽出來,大概也算一種看清自己的測試吧,是進步還是咋,最清楚的人,還是自己罷。
常見選項如下:
USER:進程用戶
euser---實際生效的user
ruser---進程的發起者,表現爲進程運行文件的所屬主
PID:進程號,每個進程都有唯一的進程編號
%CUP:cup佔用率
%MUM:內存佔用率
VSZ:虛擬內存,即爲系統承諾分配的內存
RSS:真實內存,即進程實際佔用的內存
TTY:終端窗口(即位於哪個終端,守護進程顯示爲?。守護進程爲運行在後臺,不受任何終端控制的進程,如init。init是開機啓動的第一個進程,進程號爲0)
time---CPU分配時間片時間總和(單核CPU一次只能運行一個進程,爲了多進程同步執行,要進行時間分片,如將1秒分爲100個時間片,一時間片爲10毫秒。此項爲進程佔用時間片總時長。不要覺得不可能哦,聽歌看視頻類的也是可以分片的哦,只不過時間太短人們感覺不到啦!)
stat---進程狀態
R:running,運行態
S: interruptable sleeping,可中斷的睡眠的進程,可手動喚醒
D: uninterruptable sleeping,不可中斷的睡眠得進程,只有在特定系統條件下才會被喚醒
T: stopped,停止態
Z: zombie,僵死態。詳情見http://blog.csdn.net/qduningning/article/details/7983708。這個還蠻氣人的,不過能解決還是出乎阿拉意料了。嘛,也是,Linux so 強大,怎麼會解決不了這個呢?不存在的!http://www.cnblogs.com/Anker/p/3271773.html,怎麼說呢,下面這篇更符合阿拉的文風,不要錯過喲。
+: 前臺進程(正在使用的)
l: 多線程進程
L:內存分頁並帶鎖
N:低優先級進程
<: 高優先級進程
start:進程開始運行的時間
s: session leader,會話(子進程)發起者
ni: nice值,即nice優先級(進程優先級的概念大家可以自行搜索下,簡單而言就是linux設定了哪些任務優先做,優先級可手動設定)
pri: priority 優先級
rtprio: 實時優先級
psr: processor CPU編號
BSD格式選項:
-ef -e: 顯示所有進程 -f: 顯示完整格式程序信息
-eFH 縮進顯示子進程(-F: 顯示更完整格式的進程信息 -H: 以進程層級格式顯示進程相關信息)
-C 腳本名/命令名 顯示某腳本
ps -C f1.sh o pid,%cpu,cmd 顯示f1.sh腳本(腳本需加shebang)
ps -C ping 搜索ping命令進程
ps -eo pid,tid,class,rtprio,ni,pri,psr, pcpu,stat,comm
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid, pid,pcpu,comm
Unix格式和BSD格式可以合起來用的,如上。
後面可指定顯示的內容也是通用的。
ps後還可跟grep進行行內容過濾,這樣就可以搜索相應的應用了。不過這裏有個專門的命令實現此功能。此命令支持正則表達式哦。
Pgrep
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
此外還有個按確切的程序名稱的命令pidof:/sbin/pidof pidof bash
舉個栗子:
搜索按root身份運行的命令(不加l只顯示進程號) pgrep -lu root
搜索saber用戶發起的進程 pgrep -lU saber
個人風格太重,希望不會影響到觀感體驗。>_<
歡迎提建議,不一定會改,但可以切磋之後也說不定。嘿,就這樣了。