進程2.0——查看進程

在學習查看進程之前應該再次認識一下進程的標識符——PID

每個進程都有一個非負的唯一進程ID(PID)。雖然是唯一的,但是PID可以重用,當一個進程終止後,其他進程就可以使用它的PID了。

PID爲0的進程爲調度進程,該進程是內核的一部分,也稱爲系統進程;PID爲1的進程爲init進程,它是一個普通的用戶進程,但是以超級用戶特權運行;PID爲2的進程是頁守護進程,負責支持虛擬存儲系統的分頁操作。

除了PID,每個進程還有一些其他的標識符,在unistd.h庫中提供了這些函數來獲取進程的標識符,可以瞭解一下:

#include <unistd.h>
pid_t getpid(void); //返回值:調用進程的進程ID
pid_t getppid(void); //返回值:調用進程的父進程ID

#include<sys/types.h>
uid_t getuid(void); //返回值:調用進程的實際用戶ID
uid_t geteuid(void); //返回值:調用進程的有效用戶ID

gid_t getgid(void); //返回值:調用進程的實際組ID
gid_t getegid(void); //返回值:調用進程的有效組ID

下面是幾種查看進程的方式:

  1. 通過 /proc 系統文件夾查看

    Linux系統上根目錄下的proc目錄是一種文件系統,即proc文件系統。與其它常見的文件系統不同的是,/proc是一種僞文件系統(也即虛擬文件系統),存儲的是當前內核運行狀態的一系列特殊文件,用戶可以通過這些文件查看有關係統硬件及當前正在運行進程的信息,甚至可以通過更改其中某些文件來改變內核的運行狀態。

    proc如要獲取PID爲1的進程信息,你需要查看 /proc/1 這個文件夾

  2. 通過ps命令查看

    ps 命令是最基本同時也是非常強大的進程查看命令。使用該命令可以確定有哪些進程正在運行和它所運行的狀態、進程是否結束、進程有沒有僵死、哪些進程佔用了過多的資源等。總之大部分信息都是可以通過執行該命令得到的。ps 命令最常用來監控後臺進程的工作情況,因爲後臺進程是不和屏幕、鍵盤這些標準輸入/輸出設備進行通信的,所以如果需要檢測後臺情況,就需要使用 ps 命令了

    ps所能用到的主要選項如下:

    -a:顯示系統中所有進程的信息。
    -e:顯示所有進程的信息。
    -f:顯示進程的所有信息。
    -l:以長格式顯示進程信息。
    -r:只顯示正在運行的進程。
    -u:顯示面向用戶的格式(包括用戶名、CPU 及內存的使用情況等信息)。
    -x:顯示所有非控制終端上的進程信息。
    -p:顯示由進程 ID 指定的進程信息。
    -t:顯示指定終端上的進程信息。
    

    要對進程進行監測和控制,首先要了解當前進程的情況,當然也就需要查看當前進程的狀態了。通過 ps 命令查看進程,根據所顯示的信息可以瞭解哪個進程正在運行、哪個進程被掛起了、進程已運行了多久、進程正在使用的資源、進程的相對優先級,以及進程的標誌號(PID)。所有這些信息對用戶都很有用,對於系統管理員來說尤爲重要。使用 ps -aux 命令可以獲得終端上所有用戶的有關進程的所有信息,這個也是我們平時用得最多的命令之一,如下所示:

    ps命令

    在這裏,第一行的表頭分別代表了以下含義:

    USER:表示啓動進程的用戶。
    PID:表示進程標誌號。
    %CPU:表示運行該進程佔用 CPU 的時間與該進程總的運行時間之比。
    %MEM:表示該進程佔用內存與總內存之比。
    VSZ:表示佔用的虛擬內存大小,以 KB 爲單位。
    RSS:爲進程佔用的物理內存值,以 KB 爲單位。
    TTY:表示該進程建立時所對應的終端,“?”表示該進程不佔用終端。
    STAT:表示進程的運行狀態。包括以下幾種代碼:D,不可中斷的睡眠;R,就緒(在可運行隊列中);S,睡眠;T,被跟蹤或停止;Z,終止(僵死)的進程,這些進程不存在,但暫時無法消除;W,沒有足夠的內存分頁可分配;<,高優先級的進程;N,低優先級的進程;L,有內存分頁分配並鎖在內存體內(實時系統或 I/O)。
    START:爲進程開始時間。
    TIME:爲執行的時間。
    COMMAND:是對應的命令名。
    

    由於 ps 執行後結果太多了,所以我們一般會用ps命令和管道與grep命令一起來精確定位我們需要的進程,例如,當我們要查看mysql的進程時,可以使用命令ps -aux | grep mysql,結果如下:

    ubuntu@VM-0-7-ubuntu:/$ ps -aux | grep mysql
    mysql     3677  0.0 10.2 1123492 197104 ?      Ssl  Jul21  91:40 /usr/sbin/mysqld
    ubuntu   18788  0.0  0.0  13232  1028 pts/0    S+   10:28   0:00 grep --color=auto mysql
    

    我們會發現多出了一條grep命令自身的進程,所以我們一般會加上grep的-v選項過濾掉grep命令自身:

    ubuntu@VM-0-7-ubuntu:/$ ps -aux | grep -v grep | grep mysql
    mysql     3677  0.0 10.2 1123492 197104 ?      Ssl  Jul21  91:41 /usr/sbin/mysqld
    
  3. 通過top命令查看

    top 命令可動態顯示服務器的進程信息。top 命令和 ps 命令的基本作用是相同的,都顯示系統當前進程的狀況。但 top 是一個動態顯示過程,即用戶可以通過按鍵來不斷刷新當前狀態

    top命令

    第一行內容依次表示當前時間、系統啓動的時間、當前系統登錄的用戶數、平均負載

    第二行依次顯示的是所有啓動的、目前運行的、掛起(Sleeping)的和無用(Zombie)的進程

    第三行顯示的是目前 CPU 的使用情況,包括系統佔用的比例、用戶使用比例、閒置(Idle)比例

    第四行顯示物理內存的使用情況,包括總的可以使用的內存、已用內存、空閒內存、緩衝區佔用的內存

    第五行顯示交換分區的使用情況,包括總的交換分區、使用的、空閒的和用於高速緩存的交換分區

    第六行是表頭,下面分別進行詳細解釋:

    PID(Process ID):進程標誌號,是非零正整數。
    USER:進程所有者的用戶名。
    PR:進程的優先級別。
    NI:進程的優先級別數值。
    VIRT:進程佔用的虛擬內存值。
    RES:進程佔用的物理內存值。
    SHR:進程使用的共享內存值。
    STAT:進程的狀態,其中S表示休眠,R表示正在運行,Z表示僵死狀態,N表示該進程優先值是負數。
    %CPU:該進程佔用的CPU使用率。 
    %MEM:該進程佔用的物理內存和總內存的百分比。
    TIME:該進程啓動後佔用的總CPU時間。
    COMMAND:進程啓動的啓動命令名稱,如果這一行顯示不下,在進程中會有一個完整的命令行。
    

    在 top 命令使用過程中,還可以使用一些交互的命令來完成其他參數的功能。這些命令是通過快捷鍵啓動的,格式如下所示:

    <空格>:立刻刷新其主要參數。
    P:根據CPU使用的多少進行排序。
    T:根據時間、累計時間排序。
    q:退出top命令。
    m:切換顯示內存信息。
    t:切換顯示進程和CPU狀態信息。
    c:切換顯示命令名稱和完整命令行。
    M:根據使用內存的大小進行排序。
    W:將當前設置寫入~/.toprc文件中,這是寫top配置文件的推薦方法。
    
  4. 通過pgrep命令查找PID

    pgrep 命令的作用是查找當前運行的進程,並列出匹配給定條件進程的 PID。所有的條件都必須匹配纔會被列出。使用權限爲所有用戶

    ubuntu@VM-0-7-ubuntu:~$ pgrep mysql
    3677
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章