1. 程式人生 > >2018-5-28進程工具命令管理

2018-5-28進程工具命令管理

Linux 系統管理

我們回顧一下所講述的內容,在Linux的內核的功能中,進程管理是一個在內核中基本的功能,而在進程管理中,最重要的功能就是進程調度,之所以有進程調度是因為在多任務的操作系統上,進程數是要多於CPU的核心數的,所以只能將進程輪流運行在CPU上,將CPU的運行劃分成多個時間片,以時間片為單位去輪流運行進程,不過這樣一來導致運行沒有運行完就會被其它進程替換,為了保證被替換時能夠保留當前一刻狀態,所以被替換時要進行保護現場,目的為了是當又輪到該進程時,可以進行恢復現場,將該進程的狀態信息能夠進行還原,那麽保存現場的進程的狀態信息被放置在CPU的寄存器上,等待再次進行調度,將寄存器所保存的進程狀態信息進行還原。而每一個進程都保留在
task struct任務結構列表當中所描述的數據結構。內核為了能夠追蹤每個任務,它靠諸多的task struct,因此諸多的task struct形成了任務列表task list

回顧:Linux OS的基礎概念、進程查看等工具;
    
    內核的功能:進程管理(進程調度)
        進程調度:保存現場,恢復現場;
            task struct:任務結構;
            task list:任務列表;

一、Linux進程及作業管理(2)

1.1 htop命令

htop是一個top的升級版,擁有更多的功能以及更加友好的方式對用戶進行顯示,使用起來也非常的方便,但是這需要額外安裝,該軟件在

epel源中。如果沒有epel源的話,則需要添加。

# yum info htop
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Available Packages
Name        : htop
Arch        : x86_64
Version     : 2.1.0
Release     : 1.el7
Size        : 102 k
Repo        : aliyun-epel
Summary     : Interactive process viewer
URL         : http://hisham.hm/htop/
License     : GPLv2+
Description : htop is an interactive text-mode process viewer for Linux, similar to
            : top(1).

看的出來屬於epel源,我們進行安裝。

# yum -y install htop

安裝完成之後,我們直接輸入htop命令。

# htop

技術分享圖片

作為程序包來講,CentOS系統不允許由兩個遠程終端使用同一個yum命令,因為在安裝時,必須保證程序包的一致性和完整性。
對於htop而言,是可以支持鼠標操作的,如果點擊HELP的話,就會出現以下幫助界面。

技術分享圖片

那麽該命令的選項為:

    選項:
        -d #:指定延遲時間間隔;
        -u UserName:僅顯示指定用戶的進程;
        -s COLUME:以指定字段進行排序;
        
    子命令:
        l:顯示選定的進程打開的文件列表;
        s:跟蹤選定的進程的系統調用;
        t:以層級關系顯示各進程狀態;
        a:將選定的進程綁定至某指定的CPU核心;

1.2 vmstat命令

vmstat命令是統計並報告虛擬的內存數據的,默認顯示一行數據,delay和count就是指定每隔多長時間顯示多少次,而後自動退出,那麽對於該命令的格式為:

    vmstat [options] [delay [count]]

例如:delay每隔3秒鐘count顯示3次。

# vmstat 3 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 434820   2084 375648    0    0    46    10   89  263  1  1 98  0  0
 0  0      0 434820   2084 375680    0    0     0     1   83   85  0  0 100  0  0
 0  0      0 434572   2084 375680    0    0     0     0  100   94  0  1 98  0  0

對於以上的字段來說,我們來一一進行解釋並且理解與讀懂,第一個就是procs,該字段為processes的簡寫。

    procs:
        r:等待運行的進程的個數;CPU上等待運行的任務隊列長度;
        b:處於不可中斷睡眠態的進程個數;被阻塞的任務隊列的長度;

那麽第二列為顯示memory信息,在內存段中的一下的解釋信息為:

    memory:
        swpd:交換內存使用總量;
        free:空閑的物理內存總量;
        buffer:用於buffer的內存總量;
        cache:用於cache的內存總量;

第三列為swap列信息,為交換分區的速率信息,表示每秒鐘多少個,在這裏取出的為平均值,在這一段中的解釋信息具體如下:

    swap:
        si:數據進入swap中的數據速率(kb/s);
        so:數據離開swap的速率(kb/s);

第四列為io信息,在這個字段下有bi和bo,解釋信息如下:

    io:
        bi:從塊設備讀入數據到系統的速度(kb/s);
        bo:保存到數據至塊設備的速率(kb/s);

第五列為system,為系統的某些處理操作,當用戶模式轉換為內核模式時,也是會發生中斷的,只不過系統調用是通過軟中斷的方式來決定的,包含的信息分別為:

    system:
        in:interrupts,中斷速率;
        cs:context switch,上下文切換的速率;

最後一列為CPU的信息,在這個信息中字段很多,那麽這些字段分別解釋為:

    cpu:
        us:user space
        sy:system
        id:idle
        wa:wait
        st:stolen

該命令的選項為:

    選項:
        -s:顯示內存統計數據;

1.3 pmap命令

pmap命令用起來並不復雜,用來顯示及報告內存的進程映射表,進程映射表就是任何一個進程所使用的內存空間看上去是連續的,但這些內存頁會被放置在不連續的物理內存空間中,那麽該命令就是顯示內存信息。

那麽該命令的使用格式為:

    pmap [options] PID [PID ...]
        -x:顯示詳細格式的信息;
        
    另一種查看方式:cat /proc/PID/maps

1.4 glances命令

glannes命令也是最近出現的一款管理進程的工具,由Python語言發言其功能非常強大的命令,而且支持C/S架構模式,遠程查看。
技術分享圖片

對於該命令來講,有許多的內建子命令,但可以省略,而使用選項也很多,我們簡單的介紹一些常用選項來舉例說明。

    內建命令:
        使用h鍵來進行獲取;
        
    常用選項:
        -b:以bytes為單位顯示網上速率;
        -d:關閉磁盤I/O模塊;
        -m:關閉mount模塊;
        -n:關閉network模塊;
        -t#:刷新時間間隔;
        -l:每個CPU的相關數據單獨顯示;
        --export-csv FILENAME.csv:輸出格式;
        -f /PATH/TO/SOMEDIR:設定輸出文件的位置;

接下來我們使用C/S模式下運行glances。那麽說明由客戶端遠程連接服務端,在服務模式中指明選項為-s-B,後面跟上其IP地址,而IP地址的指向就是本機的某地址,其作用用於監聽。

C/S模式下運行glances命令:
    服務模式:
        glances -s -B IPADDR
        
        IPADDR:本機的某地址,用於監聽;

而客戶端模式我們使用-c選項,後面跟上服務端的IP地址。

    客戶端模式:
        glances -c IPADDR
        
        IPADDR:遠程服務器地址;

1.5 dstat命令

dstat命令也是新晉出現的一款工具,而且已經收入到base源中,該命令的功能非常強大,它是一種非常精巧的查看系統使用率的一款命令工具,這款工具幾乎柔和了我們之前所學到那幾款命令工具的功能,那麽該命令的使用格式為:

    dstat [-afv] [options...] [delay [count]]

默認輸入dstat命令的界面為:

技術分享圖片

當我們不給任何選項時,默認的選項為-cdngy,那麽我們總結一下其常用選項:

    常用選項:
        -c, --cpu:顯示CPU相關的信息;
            -c #,#,...,total
        -d, --disk:顯示磁盤相關的信息;
            -D sda,sdb,...total
        -g:顯示page相關的信息;
        -m:Memory的相關統計數據;
        -n:Interface的相關統計數據;
        -p:顯示process的相關統計數據;
        -r:顯示io 請求的相關統計數據;
        -s:顯示swapped的相關統計數據;
        
        --tcp:
        --udp:
        --raw:
        --socket:
        
        --ipc:
        
        --top-cpu:顯示最占用CPU的進程;
        --top-io:最占用io的進程;
        --top-men:最占用內存的進程;
        --top-lantency:延遲最大的進程;

1.6 kill命令

kill命令顧名思義,就是殺死,其實真正的意義為向進程發送信號的,也可終止某一個進程。

kill命令:
    kill - terminate a process
    
    用於向進程發送信號,以實現對進程的管理;

我們可以使用-l選項來顯示當前系統上可用的信號類型,需要註意的是,只有管理員才有權限能夠kill掉進程。

    顯示當前系統可用信號:
        kill -l [signal]
        
        每個信號的標識方法有三種:
            (1) 信號的數字標識;
            (2) 信號的完整名稱;
            (3) 信號的簡要名稱;

那麽我們向進程發送信號,可以使用-s選項,也可以不使用就可以直接跟上其可用數字信號就可以。

    向進程發送信號:
        kill [-s signal|-SIGNAL] pid...

在平時的操作中,我們常用的信號有:

    常用信號:
        1) SIGHUP:無須關閉進程而讓其重讀配置文件;
        2) SIGINT:終止正在運行的進程,相當於Ctrl+c;
        9) SIGKILL:殺死運行中的進程;
        15) SIGTERM:終止運行中的進程;
        18) SIGOUT:
        19) SIGSTOP:

1.7 killall命令

當有許多進程一一處理很麻煩時,需要斬草除根時,必要時殺人滅口是非常關鍵的一個手段,正所謂好人做到低,使用killall命令可以做到這一點,該命令的用法也很容易理解。與kill命令不同是,killall命令是根據進程名直接殺死進程,而不用指定PID

killall命令:
    killall [-SINGAL] program


2018-5-28進程工具命令管理