進程管理工具ps詳解

此ps非某ps。

阿拉說的是linux裏歷史悠久,運維人員人人愛的ps,不是攝影相關的那個喲。不管哪個,都能讓人渾身難受,外加回想起某次加班到深夜的慘痛經歷。懂的懂的,阿拉過去也是差點成爲設計狗,沒想到跳出那個ps的坑,還有這個ps等着我。

說多了都是淚啊。t_0004.gif

好奇戳進來的萌寶寶們就姑且當個故事看下去吧。如果姑且不會覺得不耐煩的話。

但願搜索引擎足夠強大。讓阿拉的文章也去非專業的領域漏漏臉。

此ps是processes的簡寫。linux裏這種簡寫的命令還不少呢。有時候出現首字母簡寫的反而讓人覺得不舒服,比如usr,阿拉相當長的一段時間都認爲那是user的縮寫,然而,事實上,那更多的可能是Unix System Resource。爲什麼說可能呢?嗨,最初的時候這個目錄下放的的確是用戶信息,後來有/home了,這傢伙就漸漸成爲了系統類文件夾,也有說是unix software resources的縮寫的。

看吧,就算是IT行業,也不是凡事都有標準的。嘛,理解成技術人員的幽默的話你也算是個及格的初學者了。

processes顧名思義,就是進程。話說英語好學IT真的是個助力啊。

不好也沒關係。學linux還能提升英語素養。一套完整的課程下來,說不定四級就能過了呢。i_f18.gif

正題,咳咳。

單敲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學習就像在讀一本厚厚的字典,知道使用方法比背下來要輕鬆的多,也有用的多。畢竟背字典吶,對很多人來說都沒有必要的啊。有背下的大神,且受阿拉一拜。B_0060.gif現充去死啊!!!

抱歉,失禮了。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 強大,怎麼會解決不了這個呢?t_0021.gif不存在的!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


個人風格太重,希望不會影響到觀感體驗。>_<

歡迎提建議,不一定會改,但可以切磋之後也說不定。嘿,就這樣了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章