Linux系統進程管理

本章學習內容

    ——進程概念

    ——進程創建、切換和撤銷

    ——進程調度

    ——進程分類

    ——進程狀態

    ——進程管理工具

引言

    在linux系統中,內核的功用有:進程管理、文件系統、網絡功能、內存管理、驅動程序、安全功能等,在這眾多的模塊中,進程管理是相對重要的一環,即使不像文件系統和網絡功能那么復雜。在進程管理中,內核對進程的創建、切換、撤銷和調度都有很詳細的定義。

1、進程及相關概念   

    <1>進程:進程可以理解為程序執行的一個有生命周期的實例,有唯一的PID來標識,它包括可執行程序以及與其相關的系統資源,比如打開的文件、掛起的信號、內核內部數據、處理器狀態、內存地址空間及包含全局變量的數據段等。從內核的角度看,進程也可以稱為任務。

    <2>進程描述符:與進程相關的事情非常多,比如進程的PID、狀態、進程的優先級、進程的地址空間、允許該進程訪問的文件等等,Linux內核為此專門設計了一個類型為task_struct的結構體,稱之為進程描述符。進程描述符中包含了內核管理進程的所有信息,可以說,只要得到一個進程的進程描述符,就可以知道一個進程的所有信息。

2、進程的創建、切換和撤銷

    <1>進程創建在系統啟動時,會先在CPU上加載內核,之后內核創建第一個進程init(centos7上是systemd),init通過系統調fork()創建各種各樣的子進程,各進程之間遵循Cow機制(即修改數據才分配內存)。

    <2>進程切換:進程切換又稱為任務切換、上下文切換。它是這樣一種行為,為了控制進程的執行,內核掛起當前在CPU上運行的進程,并恢復以前掛起的某個進程的執行。

    <3>撤銷進程:進程終止后,需要通知內核以便內核釋放進程所擁有的資源,包括內存、打開文件以及其他資源,如信號量

3、進程調度    

    <1>調度策略:調度策略就是這樣一組規則:決定什么時候以怎樣的方式選擇一個新進程運行。所以定義一個進程的優先級來滿足這樣一種策略。這個策略以0-139的優先級來表示。

           實時優先級:1-99

               無需調整,數字越大,優先級越高

           靜態優先級:100-139

               可調整,數字越小,優先級越高

  wKiom1fRULmwe7ecAAAPyP-t1oo636.png

優先級以Nice值調整

    Nice:-20—-19 ,存在于task_struct結構體中  

公式如下:        

pri(new)=nice+pri(old)    

    <2>調度算法:早起的Linux中,調度算法是根據進程的優先級選擇“最佳”進程來執行,它的缺點是時間開銷與“可運行進程數量”有關。某種調度算法一定滿足一種函數關系,業界稱為Big O        

        Big O:時間復雜度,用時和規模的關系。有:

        O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)

4、進程類型 

    <1>進程的分類標準一: 

       守護進程: 監控非獨立服務的進程

       普通進程:只負責自己本身服務的提供

       注意:兩者可相互轉化   

    <2>進程的分類標準二:

       CPU-Bound:CPU密集型,非交互(圖形)

       IO-Bound:IO密集型,交互(操作)

5、進程狀態 

   在內存中運行的進程也有著各種各樣的狀態

        運行態R:running

        就緒態:ready

        睡眠態

            可中斷S:interruptable

            不可中斷D:uninterruptable

        停止態T:stopped,暫停于內存中,但不會被調度,除非手動啟動

        僵死態Z:zombie,結束進程,父進程結束前,子進程不關閉

6、進程作業

進程在運行時,我們可以稱其為作業,根據其運行的環境,可分為前臺作業和后臺作業

wKiom1fRWKXTQd5KAAAqYeVP2i0239.png

注:ctrl+z、ctrl+c只對前臺運行的進程有效,jobs查看作業。

后臺運行的程序如果有標注輸出,比如ping,ctrl+z,ctrl+c無法生效。要殺死進程才可以。

也可以使用kill向進程發信號

    <1>常用信號:man 7 signal

1) SIGHUP: 無須關閉進程而讓其重讀配置文件

2) SIGINT: 中止正在運行的進程;相當于Ctrl+c

9) SIGKILL: 殺死正在運行的進程

15) SIGTERM:終止正在運行的進程

18) SIGCONT:繼續運行

19) SIGSTOP:后臺休眠

    <2>指定信號的方法:

(1) 信號的數字標識;1, 2, 9

(2) 信號完整名稱;SIGHUP

(3) 信號的簡寫名稱;HUP

補充:killall COMMAND:殺死所有COMMAND進程

      pkill -u USER:殺死所有以USER身份運行的進程

      pkill -u root:危險操作,切勿模仿

既然進程可以運行在后臺,提供一種方法將多個進程同時運行在后臺,增強效率。

    (f1.sh&);(f2.sh&);(f3.sh&)

    { f1.sh& f2.sh& f3.sh& }

    或者寫在一個腳本中。 

    vi all.sh

    f1.sh&

    f2.sh&

    f3.sh&

7、進程管理工具

<1>ps axu

wKioL1fPsIDCHV0BAAGF6aa_zDI491.jpg

USER 運行進程的用戶
PID 進程ID
%CPU 占用CPU
%MEM 占用內存
VSZ 虛擬內存集
RSS 實際內存集
TTY 終端信息
STAT 進程狀態
START 進程狀態
TIME 運行時間
COMMAND 進程名稱

也可以通過特定的選項來顯示信息

  ps -axo pid、comm、%cpu、%mem、state、tty、euser、ruser

  wKiom1fPs0rimN5zAADe2LSLPlE923.jpg

  以上也證明了passwd適用于suid權限的,雖然運行用戶是user,但其真正有效的是root

<2>uptime

wKioL1fPuy7A5Su5AABP2Afi92E316.jpg

開機時間

運行時間

登陸用戶數目

平均負載:指在特定時間間隔內運行隊列中的平均進程數

    第一分鐘負載

    第五分鐘負載

    第十分鐘負載

    注意:1、5、10分鐘的平均負載,一般不會超過1                            

    參考值:如果每個CPU內核的當前活動進程數不大于3的話,那么系統的性能良好。如果每個CPU內核的任務數大于5,那么這臺機器的性能有嚴重問題。

         如果linux主機是1個雙核CPU的話,當Load Average為6的時候說明機器已經被充分使用。

<3>top

wKiom1fPwpTyoAdnAAI5SPDB4JM569.jpg

Tasks

total 進程總數
running 運行進程數
sleeping 休眠態進程數
stopped 停止態進程數
zobie 僵死態進程數

%Cpu(s)

us(user space) 用戶空間占用CPU百分比
sy(system) 內核空間占用CPU百分比   注:高負載時:us:sy=7:3
ni(nice) 修改nice值占用的CPU百分比
id(idle)  空閑的CPU百分比
wa(wait)  等待IO完成占用的CPU百分比
hi(hardware interrupt)  硬中斷占用CPU百分比
si(software interrupt) 軟中斷占用CPU百分比
st(stole) 被偷走的CPU,比如VMware

buffer(緩沖) 元數據
cache(緩存) 數據

PID 進程號
USER 進程發起者
PR(priority) 優先級
NI(Nice) nice值
VIRT 虛擬內存集
RES 常駐內存集
SHR 共享內存集
S(status) 狀態
%CPU CPU占用比
%MEM 內存占用比
TIME+ 運行時長
COMMAND 啟動進程

對顯示排序的方法:

P 占據的CPU百分比
M 占據內存百分比
T 累積占據CPU時長

首部信息顯示:

l uptime信息
t tasks及cpu信息
#數字 cpu分別顯示
m memory信息
s 修改刷新時間間隔
Esc 退出
k 終止指定進程
W 保存文件
q 退出命令

注:

直接查看進程編號  pidof COMMAND  或者  ps aux | grep **—–>kill

<4>htop

wKiom1fP0BCjzJ8vAAUL53ILZdo725.jpg

比top更加高級的進程管理軟件

f1幫助

f2切換CPU、mem、swap顯示方式

f10退出

選中進程執行k

<5>vmstat:查看磁盤吞吐量

wKiom1fP0tOQA_Q4AADefO6sBf8620.jpg

vmstat -s: 內存的匯總信息

r 等待運行的進程的個數,和核心數有關
b 處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度)

swap:

si 從磁盤交換進內存的數據速率(kb/s)
so 從內存交換至磁盤的數據速率(kb/s)

io:

bi 從塊設備讀入數據到內存的速率(kb/s)    讀
bo 從內存寫入磁盤的速率(kb/s)            寫

分別使用 dd if=/dev/sda of=/dev/null

         dd if=/dev/sda of=/tmp/f1 可做測試

<6>glanceswKioL1fP2EiAUlFZAARQ8reM570930.jpg    h: 幫助信息                                                                                特性C/S結構

Server端:glances -s -B IP

Client端:glances -c IP                                                                    <7>dstat

wKiom1fP2oGhaLMMAAHqNGgIo9o300.jpg

磁盤的讀寫可通過dd if=/dev/sdb of=/dev/zero 測試

網絡監控可通過ping -f IP -s 65507測試。                     

原創文章,作者:mfwing,如若轉載,請注明出處:http://www.www58058.com/46016

(0)
mfwingmfwing
上一篇 2016-09-13 09:29
下一篇 2016-09-13 10:19

相關推薦

  • Linux系統終端類型

    引言 終端(Terminal)也稱終端設備,是計算機網絡中處于網絡最外圍的設備,主要用于用戶信息的輸入以及處理結果的輸出等。在早期計算機系統中,由于計算機主機昂貴,因此一個主機一般會配置多個終端,這些終端本身不具備計算能力,僅僅承擔信息輸入輸出的工作,運算和處理均由主機來完成,在個人計算機時代,個人計算機可以運行稱為終端仿真器的程序來模仿一個終端的工作。 &…

    Linux干貨 2016-10-19
  • LVS的簡介和配置

    lvs分為3種模式 :1:lvs-nat:本質是多目標IP的DNAT,通過將請求報文中的目標地址和目標端口修改為某挑出的RS的RIP和PORT實現轉發(1)RIP和DIP必須在同一個IP網絡,且應該使用私網地址;RS的網關要指向DIP(2)請求報文和響應報文都必須經由Director轉發,Director易于成為系統瓶頸(3)支持端口映射,可修改請求報文的目…

    2017-10-23
  • linux下find(文件查找)命令的詳解

    文件查找命令locate和find詳解 locate 配合數據庫緩存,快速查看文件位置,非實時查找( 數據庫查找) find 實際搜尋硬盤查詢文件名稱 ,實時查找 locate簡介 locate命令其實是find -name的另一種寫法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個數據庫/var/lib/locat…

    Linux干貨 2016-08-18
  • 初學Linux之程序進程管理工具匯總

    pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup ?

    2017-12-16
  • sed初步認識

     ◆ sed基礎概念 ◆ sed用法 一.sed 基礎概念: Stream EDitor (流/行編輯器) sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕…

    2017-03-16
  • 配額、RAID、軟RAID以及LVM管理

    磁盤配額允許控制用戶或者組織對磁盤的使用,它能防止個人或者組織使用文件系統中超過自己使用的部分,或者造成系統完全擁堵。配額必須由root用戶或者具有root權限的用戶啟用和管理。 硬RAID以及軟RAID :RAID是Redundant Array of Independent Disks的簡寫,即獨立硬盤冗余陣列,簡稱磁盤陣列。通過實現的方式不同…

    Linux干貨 2016-11-23

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-20 11:14

    總結的很棒,對進程管理基礎與命令介紹的很詳細哦。贊一個

欧美性久久久久