進程管理前端
一、操做系統基礎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