1.什么是進程?
開發寫的代碼叫程序,那么把代碼運行起來,就叫做進程
總結成一句話:當我們運行程序時,運行起來的程序就叫做進程
當程序運行成為進程后,系統會為該進程分配內存,以及進程運行的身份和權限
在進程運行過程中,系統會有各種指標來表示當前運行狀態
2.程序和進程的區別
程序是數據和指令的集合,是一個靜態的概念. 可以長時間存在系統中
進程是程序運行的過程,是一個動態的概念. 進程是有生命周期的,會隨著程序的結束而終止,不會一直存在于系統中
3.進程的生命周期
指 進程的開始,過程,結束
進程的處理流程
當父進程接收到任務調度時,會通過fock派生子進程來處理,那么子進程會繼承父進程屬性。
1.子進程在處理任務代碼時,父進程會進入等待狀態中...
2.子進程在處理任務代碼后,會執行退出,然后喚醒父進程來回收子進程的資源。
3.如果子進程在處理任務過程中,父進程退出了,子進程沒有退出,那么這些子進程就沒有父進程來管理了,就變成僵尸進程。
PS: 每個進程都父進程的PPID,子進程則叫PID。
4.監控進程狀態
程序在運行后,我們需要了解進程的運行狀態。查看進程的狀態分為: 靜態和動態兩種方式
1.使用ps命令查看當前的進程狀態(靜態)
(1)示例、ps -aux常用組合,查看進程 用戶、PID、占用cpu百分比、占用內存百分比、狀態、執行的命令等
USER 啟動進程的用戶
PID 進程運行的ID號
%CPU 進程占用CPU百分比
%MEM 進程占用內存百分比
VSZ 進程占用虛擬內存大小 (單位KB)
RSS 進程占用物理內存實際大小 (單位KB)
TTY 進程是由哪個終端運行啟動的tty1、pts/0等 ?表示內核程序與終端無關
STAT 進程運行過程中的狀態 man ps (/STATE)
START 進程的啟動時間
TIME 進程占用 CPU 的總時間(為0表示還沒超過秒)
COMMAND 程序的運行指令,[ 方括號 ] 屬于內核態的進程。 沒有 [ ] 的是用戶態進程。
(2).STAT狀態的S、Ss、S+、R、R、S+等等,都是什么意思?
R 進程運行
s 進程是控制進程, Ss進程的領導者,父進程
S 可中斷睡眠
< 進程運行在高優先級上,S<優先級較高的進程
T 進程被暫停
N 進程運行在低優先級上,SN優先級較低的進程
D 不可中斷睡眠
當前進程運行在前臺,R+該表示進程在前臺運行
Z 僵尸進程
l 進程是多線程的,Sl表示進程是以線程方式運行
例子 :PS命令查看不可中斷狀態進程
1.使用tar打包文件時,可以通過終端不斷查看狀態,由S+,R+變為D+ [root@xuliangwei ~]# tar -czf etc.tar.gz /etc/ /usr/ /var/
[root@xuliangwei ~]# ps aux|grep tar|grep -v grep
root 58467 5.5 0.2 127924 5456 pts/1 R+ 22:22 0:04 tar -czf etc.tar.gz /etc/ [root@xuliangwei ~]# ps aux|grep tar|grep -v grep
root 58467 5.5 0.2 127088 4708 pts/1 S+ 22:22 0:03 tar -czf etc.tar.gz /etc/
[root@xuliangwei ~]# ps aux|grep tar|grep -v grep
root 58467 5.6 0.2 127232 4708 pts/1 D+ 22:22 0:03 tar -czf etc.tar.gz /etc/
2.使用top命令查看當前的進程狀態(動態)
[圖片上傳失敗...(image-25d8d4-1566379659972)]
<colgroup><col style="width: 70px;"><col style="width: 479px;"></colgroup>
任務 含義
Tasks: 129 total 當然進程的總數
1 running 正在運行的進程數
128 sleeping 睡眠的進程數
0 stopped 停止的進程數
0 zombie 僵尸進程數
%Cpu(s): 0.7 us 系統用戶進程使用CPU百分比
0.7 sy 內核中的進程占用CPU百分比,通常內核是于硬件進行交互
98.7 id 空閑CPU的百分比
0.0 wa CPU等待IO完成的時間
0.0 hi 硬中斷,占的CPU百分比
0.0 si 軟中斷,占的CPU百分比
0.0 st 比如虛擬機占用物理CPU的時間
top 常見指令
<colgroup><col style="width: 70px;"><col style="width: 350px;"></colgroup>
字母 含義
h 查看幫助
1 數字1,顯示所有CPU核心的負載
z 以高亮顯示數據
b 高亮顯示處于R狀態的進程
M 按內存使用百分比排序輸出
P 按CPU使用百分比排序輸出
q 退出top
0.0 hi 硬中斷 0.0 si 軟中斷
1.什么是中斷
中斷是系統用來響應硬件設備請求的一種機制,它會打斷進程的正常調度和執行,然后調用內核中的中斷處理程序來響應設備的請求。
2.為什么要有中斷呢?
中斷其實是一種異步的事件處理機制,可以提高系統的并發處理能力。
3.怎么解決中斷帶來的問題呢?
中斷處理程序會打斷其他進程的運行,特別是,中斷處理程序在響應中斷時,還會臨時關閉中斷。這就會導致上一次中斷處理完成之前,其他中斷都不能響應,也就是說中斷有可能會丟失。
處理辦法
Linux 將中斷處理過程分成了兩個階段,也就是上半部和下半部
上半部用來快速處理中斷,它在中斷禁止模式下運行,主要處理跟硬件緊密相關工作。
下半部用來延遲處理上半部未完成的工作,通常以內核線程的方式運行。
4.總結
Linux 中的中斷處理程序分為上半部和下半部:
上半部對應硬件中斷,用來快速處理中斷。
下半部對應軟中斷,用來異步處理上半部未完成的工作。
Linux 中的軟中斷包括網絡收發、定時、調度、等各種類型,可以通過查看 /proc/softirqs 來觀察軟中斷的運行情況。