Linux進程管理

進程管理前端

一、操做系統基礎linux

       調用:kernel經過給應用程序提供system call方式來提供硬件資源;shell

              注意:這個應用程序也包括庫文件;vim

              庫文件是運行在ring 0上的一段程序代碼,不對客戶直接提供應用;bash

       中斷、保護現場數據結構

 

二、進程運行原理(一個進程與多個進程)多線程

       一個進程:首先咱們須要把硬盤中的程序代碼加載到內存(複製),再將這段程序放到CPU上運算,此時,這段程序就會去調用(也會自動生成)不少的進程;由這些進             程來完成程序所指定的任務;socket

       在這個過程中:咱們就須要解決數據輸入與輸出,還有存儲的問題ui

             

       (不討論多核、CPU多線程的狀況)spa

       多個進程:在電腦中通常都是存在多個進程的,而CPU卻只有一個,咱們就使用time space的方式來給進程分配固定的時間來運行;某個進程只能在輪到本身運行的時候           纔會被放到CPU上執行,時間一到就會自動被踢下來,CPU則會執行下一個進程;

       問題:

       一、進程誰先誰後的問題?

              進程優先級  

       二、若是進程沒有運行完就被踢下來了怎麼辦?--解決數據存儲的問題

       三、若是進程造反了怎麼辦?

 

三、進程優先級

       0-139

              0-99  實時進程   越大越優先

              100-139  非實時進程  越小越優先

              【特性:普通用戶能夠轉讓本身的優先級】

                         nice值:定義普通進程的優先級,-20 - 19

       輪了一圈之後怎麼辦?

              在咱們內存上,會提供一個空間;這個空間會專門用來存放運行事後的進程;

              當全部的進程運行完成一遍有,這個空間,就會和原有空間對調;再提供給CPU讀取;

              一直輪換,知道進程運行完成;

 

四、進程數據怎麼辦?

       一、程序數據

       二、輸入數據輸出數據(運行到一半留下的數據)

       三、進程元數據

       task struct 數據結構體:它定義了進程數據的存儲格式;咱們將進程數據,以及進程元數據存儲tast struct中;這種結構下,方便CPU快速存儲於讀取;

 

       物理地址空間--線性地址空間

       進程在運行後的一些數據,經過線性地址對應的物理地址,存儲到內存(頁框page);MMU(內存管理單元)就是用來將不連續的物理地址轉換爲連續的線性地址;

              這些分開的頁框的數據又兩種組織形式:一、鏈表型數據  二、雙向鏈表

 

五、若是進程造反了怎麼辦?

       linux結構下進程也是樹形結構 -- pstree

       內核管理不會去直接管理;通常全部的進程都由上一級進程來管理--父子進程概念;

       最大的進程--init,有權限去管理全部的進程;

      

       正常狀況:

       一、如何生成子進程

              寫實複製:

              父進程在須要完成一項工做的時候本身沒法完成,則須要生成對應的子進程來完成這項工做,而且把本身的內存空間中的數據複製一份交給子進程,用來存儲子進程所運行數據;--這個過程咱們就叫作寫實複製;

       二、子進程完成任務之後,若是關閉

              子進程任務完成,功成身退,交出全部的佔用資源;再由父進程關閉子進程,這個週期就結束了;

 

六、進程間的通信原理

       一、主機內進程通信 

              single 信號通信

              共享內存

              管道形式

       二、主機間的進程通信

              streams -- rpc

              socket

 

七、進程類型

       守護進程 -- 維護系統的正常運行

       普通進程 -- 提供應用

 

       另一種分類方式:根據佔用資源的不一樣

       佔用CPU多進程  --  後臺運行進程

       佔用內存多的進程  --  前臺要顯示進程

 

八、進程的狀態

       進程和程序比較起來,進程是有生命週期的,他會死去;

       一、running 運行

       二、sleeping狀態

       三、stop 中止狀態

       四、zombie 僵死狀態

       五、中斷狀態

      

==========================================================

 

回顧:

       進程管理:

              調用

              內核空間 用戶空間

       1個進程運行:

       多進程再單核單線程cpu上運行的狀況:

              cpu資源

              一、誰先誰後?

              二、數據存儲的問題?

                     task struct

                     page -- 頁框是一個虛擬概念,頁框之間並不知道對方的存在,只知道本身獨佔內存空間

              三、進程暴走了

                     父子進程的概念

                     寫實複製

              四、進程的分類、進程的通信、進程狀態

 

==========================================================

 

進程管理的命令

       pstree

              經過樹形結構顯示進程關係

              yum install psmisc -y

       *ps

              查看進程狀態--當前運行狀態;(這一刻)

              PID  進程ID

              TTY 啓動該進程的終端是誰  pts

              TIME      進程累計再CPU上運行的時長

              CMD      啓動該進程進程命令程序

             

              ps的經常使用組合:

              ps -aux

                     USER      進程所屬用戶

                     PID

                     %CPU     

                     %MEM

                     VSZ virtual memory size 虛擬內存大小;進程本身再內存中真是佔用的線性地址空間大小

                     RSS 常駐內空間(不能夠進行內存交換 -- swap)

                     TTY

                     STAT      進程狀態

                            R     running

                            S     sleeping

                            T     stoped

                            Z     zombie

                            附加狀態

                            s      表明是lead進程--bash

                            +     前端進程

                            <     高優先級進程

                            N    低優先級進程

                            D     表示不可中斷

                            W    沒有足夠的內存能夠分配

                            l      表示多線程進程;多線程 -- 把一個進程拆分爲多個線程來完成,這樣提升進程運行速度

                     START    進程啓動時間

                     TIME

                     COMMAND

              ps -ef

                     PPID  父進程號

                     C       進程運行再那個CPU上

              ps -ejH  

                     以樹形結構顯示進程

              ps -eo

                     自定義參數格式

                     ps -eo uid,pid,comm  

              ps -U

                     查看指定用戶所運行的進程

                     ps -U root

 

       top

              與ps相反,top實時狀態,會動態刷新

              k  --> 關閉進程  輸入PID便可;

              h  --> 幫助頁面

             

              調整top排序:

                     M   根據內存大小進行排序

                     P    根據CPU利用率來進行排序

                     T    根據使用CPU累計時長來進行排序

                     N    根據PID來進行排序

             

              能夠詳細顯示最上面的命令

                      1 2 3

       htop

              top的高級版本,默認yum源中是沒有的,須要去下載並編譯安裝使用  

       vmstat

              查看虛擬機內存的相關信息

                     進程信息

                     內存信息

                     交換內存信息

                     system系統IO相關信息 -- in cs

                     cpu信息

              -s   //以統計的形式來顯示相關信息

       pmap

              報告內存的映射信息

              pmag pid

              映射內存空間中的物理地址信息和CPU所能識別的線性地址信息;

       pidof

              經過進程ID(UID)來查看進程號(PID)

              pidof bash

       dstat

              默認沒有爲咱們安裝上 yum install dstat

              動態的顯示各類信息,能夠本身定義

              建議:去man dstat

       kill

              管理進程

              經過kill對進行發送響應的操做信號

                     1信號  HUP  --  讓進程重讀配置文件,不重啓進程

                     2信號  INT  -- 中斷進程

                     9信號  KILL  -- 強制關閉進程,不去保存進程數據

                     15信號  TERM -- 優雅關閉

              kill -l  //查看系統支持全部信號

              kill -9 pid

       pgrep

              進程過濾,也能夠作進程查找--相似於pidof

       pkill

              直接去關閉進程--能夠按照UID(名字)來關閉進程

       jobs

              做業: -- 進程

              前臺做業:佔用了當前的shell界面

              後臺做業:在後臺自動運行的進程

             

                     ctrl + z

 

                     fg -- 切回到後臺進程 : jobs -l  + -- 默認切回來的指定進程;

                     COM &  //腳本運行的時候

                     bg -- 將前端送到後臺

 

              vim a.txt

              .swp

相關文章
相關標籤/搜索