1.什么是進(jìn)程?
開發(fā)寫的代碼叫程序,那么把代碼運(yùn)行起來,就叫做進(jìn)程
總結(jié)成一句話:當(dāng)我們運(yùn)行程序時(shí),運(yùn)行起來的程序就叫做進(jìn)程
當(dāng)程序運(yùn)行成為進(jìn)程后,系統(tǒng)會(huì)為該進(jìn)程分配內(nèi)存,以及進(jìn)程運(yùn)行的身份和權(quán)限
在進(jìn)程運(yùn)行過程中,系統(tǒng)會(huì)有各種指標(biāo)來表示當(dāng)前運(yùn)行狀態(tài)
2.程序和進(jìn)程的區(qū)別
程序是數(shù)據(jù)和指令的集合,是一個(gè)靜態(tài)的概念. 可以長時(shí)間存在系統(tǒng)中
進(jìn)程是程序運(yùn)行的過程,是一個(gè)動(dòng)態(tài)的概念. 進(jìn)程是有生命周期的,會(huì)隨著程序的結(jié)束而終止,不會(huì)一直存在于系統(tǒng)中
3.進(jìn)程的生命周期
指 進(jìn)程的開始,過程,結(jié)束
進(jìn)程的處理流程
當(dāng)父進(jìn)程接收到任務(wù)調(diào)度時(shí)格郁,會(huì)通過fock派生子進(jìn)程來處理腹殿,那么子進(jìn)程會(huì)繼承父進(jìn)程屬性。
1.子進(jìn)程在處理任務(wù)代碼時(shí)例书,父進(jìn)程會(huì)進(jìn)入等待狀態(tài)中...
2.子進(jìn)程在處理任務(wù)代碼后锣尉,會(huì)執(zhí)行退出,然后喚醒父進(jìn)程來回收子進(jìn)程的資源决采。
3.如果子進(jìn)程在處理任務(wù)過程中自沧,父進(jìn)程退出了,子進(jìn)程沒有退出树瞭,那么這些子進(jìn)程就沒有父進(jìn)程來管理了拇厢,就變成僵尸進(jìn)程。
PS: 每個(gè)進(jìn)程都父進(jìn)程的PPID晒喷,子進(jìn)程則叫PID旺嬉。
4.監(jiān)控進(jìn)程狀態(tài)
程序在運(yùn)行后,我們需要了解進(jìn)程的運(yùn)行狀態(tài)厨埋。查看進(jìn)程的狀態(tài)分為: 靜態(tài)和動(dòng)態(tài)兩種方式
1.使用ps命令查看當(dāng)前的進(jìn)程狀態(tài)(靜態(tài))
(1)示例邪媳、ps -aux常用組合,查看進(jìn)程 用戶荡陷、PID雨效、占用cpu百分比、占用內(nèi)存百分比废赞、狀態(tài)徽龟、執(zhí)行的命令等
USER 啟動(dòng)進(jìn)程的用戶
PID 進(jìn)程運(yùn)行的ID號(hào)
%CPU 進(jìn)程占用CPU百分比
%MEM 進(jìn)程占用內(nèi)存百分比
VSZ 進(jìn)程占用虛擬內(nèi)存大小 (單位KB)
RSS 進(jìn)程占用物理內(nèi)存實(shí)際大小 (單位KB)
TTY 進(jìn)程是由哪個(gè)終端運(yùn)行啟動(dòng)的tty1、pts/0等 ?表示內(nèi)核程序與終端無關(guān)
STAT 進(jìn)程運(yùn)行過程中的狀態(tài) man ps (/STATE)
START 進(jìn)程的啟動(dòng)時(shí)間
TIME 進(jìn)程占用 CPU 的總時(shí)間(為0表示還沒超過秒)
COMMAND 程序的運(yùn)行指令唉地,[ 方括號(hào) ] 屬于內(nèi)核態(tài)的進(jìn)程据悔。 沒有 [ ] 的是用戶態(tài)進(jìn)程。
(2).STAT狀態(tài)的S耘沼、Ss极颓、S+、R群嗤、R菠隆、S+等等,都是什么意思?
R 進(jìn)程運(yùn)行
s 進(jìn)程是控制進(jìn)程, Ss進(jìn)程的領(lǐng)導(dǎo)者骇径,父進(jìn)程
S 可中斷睡眠
< 進(jìn)程運(yùn)行在高優(yōu)先級(jí)上躯肌,S<優(yōu)先級(jí)較高的進(jìn)程
T 進(jìn)程被暫停
N 進(jìn)程運(yùn)行在低優(yōu)先級(jí)上,SN優(yōu)先級(jí)較低的進(jìn)程
D 不可中斷睡眠
當(dāng)前進(jìn)程運(yùn)行在前臺(tái)破衔,R+該表示進(jìn)程在前臺(tái)運(yùn)行
Z 僵尸進(jìn)程
l 進(jìn)程是多線程的清女,Sl表示進(jìn)程是以線程方式運(yùn)行
例子 :PS命令查看不可中斷狀態(tài)進(jìn)程
1.使用tar打包文件時(shí),可以通過終端不斷查看狀態(tài)晰筛,由S+嫡丙,R+變?yōu)镈+ [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命令查看當(dāng)前的進(jìn)程狀態(tài)(動(dòng)態(tài))
[圖片上傳失敗...(image-25d8d4-1566379659972)]
<colgroup><col style="width: 70px;"><col style="width: 479px;"></colgroup>
任務(wù) 含義
Tasks: 129 total 當(dāng)然進(jìn)程的總數(shù)
1 running 正在運(yùn)行的進(jìn)程數(shù)
128 sleeping 睡眠的進(jìn)程數(shù)
0 stopped 停止的進(jìn)程數(shù)
0 zombie 僵尸進(jìn)程數(shù)
%Cpu(s): 0.7 us 系統(tǒng)用戶進(jìn)程使用CPU百分比
0.7 sy 內(nèi)核中的進(jìn)程占用CPU百分比,通常內(nèi)核是于硬件進(jìn)行交互
98.7 id 空閑CPU的百分比
0.0 wa CPU等待IO完成的時(shí)間
0.0 hi 硬中斷传惠,占的CPU百分比
0.0 si 軟中斷迄沫,占的CPU百分比
0.0 st 比如虛擬機(jī)占用物理CPU的時(shí)間
top 常見指令
<colgroup><col style="width: 70px;"><col style="width: 350px;"></colgroup>
字母 含義
h 查看幫助
1 數(shù)字1,顯示所有CPU核心的負(fù)載
z 以高亮顯示數(shù)據(jù)
b 高亮顯示處于R狀態(tài)的進(jìn)程
M 按內(nèi)存使用百分比排序輸出
P 按CPU使用百分比排序輸出
q 退出top
0.0 hi 硬中斷 0.0 si 軟中斷
1.什么是中斷
中斷是系統(tǒng)用來響應(yīng)硬件設(shè)備請(qǐng)求的一種機(jī)制卦方,它會(huì)打斷進(jìn)程的正常調(diào)度和執(zhí)行羊瘩,然后調(diào)用內(nèi)核中的中斷處理程序來響應(yīng)設(shè)備的請(qǐng)求。
2.為什么要有中斷呢?
中斷其實(shí)是一種異步的事件處理機(jī)制盼砍,可以提高系統(tǒng)的并發(fā)處理能力尘吗。
3.怎么解決中斷帶來的問題呢?
中斷處理程序會(huì)打斷其他進(jìn)程的運(yùn)行,特別是寺擂,中斷處理程序在響應(yīng)中斷時(shí)源譬,還會(huì)臨時(shí)關(guān)閉中斷。這就會(huì)導(dǎo)致上一次中斷處理完成之前跨蟹,其他中斷都不能響應(yīng)近刘,也就是說中斷有可能會(huì)丟失擒贸。
處理辦法
Linux 將中斷處理過程分成了兩個(gè)階段,也就是上半部和下半部
上半部用來快速處理中斷觉渴,它在中斷禁止模式下運(yùn)行介劫,主要處理跟硬件緊密相關(guān)工作。
下半部用來延遲處理上半部未完成的工作案淋,通常以內(nèi)核線程的方式運(yùn)行座韵。
4.總結(jié)
Linux 中的中斷處理程序分為上半部和下半部:
上半部對(duì)應(yīng)硬件中斷,用來快速處理中斷踢京。
下半部對(duì)應(yīng)軟中斷誉碴,用來異步處理上半部未完成的工作。
Linux 中的軟中斷包括網(wǎng)絡(luò)收發(fā)瓣距、定時(shí)黔帕、調(diào)度、等各種類型旨涝,可以通過查看 /proc/softirqs 來觀察軟中斷的運(yùn)行情況蹬屹。