今日總結(jié)
1.什么是進(jìn)程
- 我們將寫(xiě)好的代碼叫做程序,把程序運(yùn)行起來(lái)叫做進(jìn)程。也就是當(dāng)我們運(yùn)行一個(gè)程序摹迷,我們將運(yùn)行起來(lái)的程序叫做進(jìn)程。
- 程序運(yùn)行為進(jìn)程時(shí)郊供,系統(tǒng)會(huì)為該進(jìn)程分配內(nèi)存峡碉,以及進(jìn)程運(yùn)行的身份和權(quán)限。
- 在進(jìn)程運(yùn)行的過(guò)程中驮审,系統(tǒng)會(huì)有各種指標(biāo)來(lái)表示當(dāng)前進(jìn)程運(yùn)行的狀態(tài)鲫寄。
2.程序與進(jìn)程之間有什么區(qū)別吉执?
- 程序是數(shù)據(jù)和指令的集合,是一個(gè)靜態(tài)的概念地来,比如ls戳玫,cp這些指令是二進(jìn)制文件,會(huì)一直存在于系統(tǒng)中未斑。
- 進(jìn)程時(shí)程序運(yùn)行的過(guò)程咕宿,是一個(gè)動(dòng)態(tài)的概念,進(jìn)程是存在生命周期概念的蜡秽,也就是說(shuō)進(jìn)程會(huì)隨著程序的結(jié)束而終止府阀,不會(huì)永久存在于系統(tǒng)中。
3.進(jìn)程的生命周期
- 當(dāng)父進(jìn)程接收到任務(wù)調(diào)度時(shí)芽突,會(huì)通過(guò)fock派生子進(jìn)程來(lái)處理试浙,那么父進(jìn)程會(huì)繼承子進(jìn)程的屬性。
- 當(dāng)子進(jìn)程在處理任務(wù)是費(fèi)進(jìn)程處于等待狀態(tài)寞蚌。
- 在子進(jìn)程在處理完成后會(huì)喚醒父進(jìn)程田巴,讓父進(jìn)程回收處理子進(jìn)程的資源。
- 當(dāng)子進(jìn)程處理任務(wù)時(shí)父進(jìn)程退出了睬澡,子進(jìn)程沒(méi)有退出那么這個(gè)進(jìn)程就會(huì)變?yōu)槔M(jìn)程固额。
- 每個(gè)進(jìn)程父進(jìn)程叫ppid,子進(jìn)程叫pid
- 使用ps命令查看當(dāng)前進(jìn)程的狀態(tài)(靜態(tài))
4.進(jìn)程運(yùn)行的狀態(tài)指標(biāo)
進(jìn)程在運(yùn)行后煞聪,我們需要了解進(jìn)程的運(yùn)行狀態(tài)。查看進(jìn)程的狀態(tài)分為:靜態(tài)和動(dòng)態(tài)兩種方式
- 使用ps命令查看當(dāng)前進(jìn)程的狀態(tài)(靜態(tài))
1.通常使用ps -aux組合逝慧,查看進(jìn)程 用戶昔脯,PID,占用cpu百分比笛臣,占用內(nèi)存百分比云稚,狀態(tài),執(zhí)行的命令等沈堡。
[root@oldboy~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128428 6968 ? Ss 09:42 0:02 /usr/lib/system
root 2 0.0 0.0 0 0 ? S 09:42 0:00 [kthreadd]
狀態(tài) |
描述 |
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í)際大小 |
TTY |
進(jìn)程由那個(gè)終端運(yùn)行啟動(dòng) |
SATA |
進(jìn)程運(yùn)行過(guò)程中的狀態(tài) man ps(/STATE) |
START |
進(jìn)程的啟動(dòng)時(shí)間 |
TIME |
進(jìn)程占用CPU的總時(shí)間(為0表示還沒(méi)超過(guò)秒) |
COMMAND |
程序的運(yùn)行指令,[方括號(hào)]屬于內(nèi)核態(tài)的進(jìn)程诞丽。沒(méi)有[]是用戶態(tài)的進(jìn)程鲸拥。 |
- STAT狀態(tài)的S,Ss僧免,Ss+刑赶,S<,S+懂衩,R撞叨,R+金踪,D,T牵敷,Z等等都是什么意思胡岔?
STAT基本狀態(tài) |
描述 |
STAT狀態(tài)+符號(hào) |
描述 |
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)行的 |
- 使用top命令查看系統(tǒng)當(dāng)前的狀態(tài)
top
16:32:14 up 6:41, 4 users, load average: 0.08, 0.03, 0.05 #平均負(fù)載
Tasks: 99 total, 2 running, 97 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
# Tasks: 99 total 任務(wù)總數(shù)
# 2 running 有兩個(gè)進(jìn)程正在運(yùn)行
# 97 sleeping 97個(gè)睡眠
# 0 stopped 0個(gè)掛起 停止
# 0 zombie 僵尸進(jìn)程
# %Cpu(s) CPU平均狀態(tài)
# 0.0 us 進(jìn)程占用cpu的百分比(用戶進(jìn)程)
# 0.3 sy 內(nèi)核進(jìn)程(硬件)
# 0.0 ni 優(yōu)先級(jí)的進(jìn)程占用cpu的百分比
# 99.7 id 空閑的進(jìn)程
# 0.0 wa cpu等待IO完成的時(shí)間
# 0.0 hi 硬中斷
# 0.0 si 軟中斷
# 0.0 st 虛擬機(jī)占用物理cpu的時(shí)間
字母 |
含義 |
h |
查看幫助 |
1 |
數(shù)字1,顯示所有CPU核心的負(fù)載 |
z |
以高亮顯示數(shù)據(jù) |
b |
高亮顯示處于R狀態(tài)的進(jìn)程 |
M |
按內(nèi)存使用百分比排序輸出 |
P |
按CPU使用百分比排序輸出 |
q |
退出top |
- 還有一些查看系統(tǒng)狀態(tài)的命令htop村生,iftop惊暴,glances
5.Linux中斷
- 什么是中斷?
中斷是系統(tǒng)用來(lái)響應(yīng)硬件設(shè)備請(qǐng)求的一種機(jī)制趁桃,它會(huì)打斷進(jìn)程的正常調(diào)度和執(zhí)行辽话,然后調(diào)用內(nèi)核中的中斷處理程序來(lái)響應(yīng)設(shè)備的請(qǐng)求。
- 為什么要有中斷
中斷其實(shí)是一種異步的時(shí)間處理機(jī)制卫病,可以提高系統(tǒng)的并發(fā)助理能力
- 中斷會(huì)帶來(lái)什么問(wèn)題油啤?
中斷會(huì)打斷其他進(jìn)程的正常運(yùn)行,所以為了減少對(duì)正常進(jìn)程運(yùn)行調(diào)度的影響蟀苛,中斷程序需要盡快的執(zhí)行益咬,但如果中斷要處理的事情很多,中斷服務(wù)程序就有可能要運(yùn)行很長(zhǎng)時(shí)間帜平,就會(huì)導(dǎo)致其他中斷都不能響應(yīng)幽告,也就是說(shuō)中斷可能會(huì)丟失。
- Linux軟中斷與硬中斷小結(jié)
- Linux 中的中斷處理程序分 為上半部和下半部:
- 上半部對(duì)應(yīng)硬件中斷裆甩,用來(lái)快速處理中斷冗锁。
- 下半部對(duì)應(yīng)軟中斷,用來(lái)異步處理上半部未完成的工作嗤栓。
- 為了解決中斷處理程序執(zhí)行過(guò)長(zhǎng)和中斷丟失的問(wèn)題冻河,Linux 將中斷處理過(guò)程分成了兩個(gè)階段,也就是上半部和下半部:
- 上半部用來(lái)快速處理中斷茉帅,它在中斷禁止模式下運(yùn)行叨叙,主要處理跟硬件緊密相關(guān)工作。
- 下半部用來(lái)延遲處理上半部未完成的工作担敌,通常以內(nèi)核線程的方式運(yùn)行岔霸。
- 例子:網(wǎng)卡接收到數(shù)據(jù)包后配椭,會(huì)通過(guò)硬件中斷的方式,通知內(nèi)核有新的數(shù)據(jù)到了倾鲫。這時(shí),內(nèi)核就應(yīng)該調(diào)用中斷處理程序來(lái)響應(yīng)它。
對(duì)上半部來(lái)說(shuō),既然是快速處理,其實(shí)就是要把網(wǎng)卡的數(shù)據(jù)讀到內(nèi)存中攒暇,然后更新一下硬件寄存器的狀態(tài)(表示數(shù)據(jù)已經(jīng)讀好了),最后再發(fā)送一個(gè)軟中斷信號(hào)子房,通知下半部做進(jìn)一步的處理形用。
而下半部被軟中斷信號(hào)喚醒后,需要從內(nèi)存中找到網(wǎng)絡(luò)數(shù)據(jù)证杭,再按照網(wǎng)絡(luò)協(xié)議棧田度,對(duì)數(shù)據(jù)進(jìn)行逐層解析和處理,直到把它送給應(yīng)用程序解愤。