-
一、什么是進(jìn)程
開(kāi)發(fā)寫(xiě)的代碼叫程序,將程序運(yùn)行起來(lái)就叫做進(jìn)程。也就是說(shuō)當(dāng)我們運(yùn)行一個(gè)程序,那么我們將運(yùn)行的程序叫做進(jìn)程。
a.當(dāng)程序運(yùn)行為進(jìn)程后,系統(tǒng)會(huì)該進(jìn)程分配內(nèi)存以及進(jìn)程運(yùn)行的身份以及權(quán)限。
b、在進(jìn)程運(yùn)行的過(guò)程中,系統(tǒng)會(huì)用各種指標(biāo)來(lái)表示當(dāng)前的運(yùn)行狀態(tài)。
-
二、程序和進(jìn)程的區(qū)別
程序是數(shù)據(jù)和指令的集合,是一個(gè)靜態(tài)的概念,如/etc/lib 。同時(shí)程序可以長(zhǎng)期存在系統(tǒng)中。
進(jìn)程是程序的運(yùn)行過(guò)程,是一個(gè)動(dòng)態(tài)的概念,它是有著生么周期概念的,也就是說(shuō)進(jìn)程會(huì)隨著程序的運(yùn)行結(jié)束隨之毀滅。
-
三、進(jìn)程的生命周期

講解:
當(dāng)父進(jìn)程接收到任務(wù)調(diào)度時(shí),會(huì)通過(guò)fock派生子進(jìn)程來(lái)處理,那么子進(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)程來(lái)回收子進(jìn)程的資源。
3.如果子進(jìn)程在處理任務(wù)過(guò)程中,父進(jìn)程退出了,子進(jìn)程沒(méi)有退出,那么這些子進(jìn)程就沒(méi)有父進(jìn)程來(lái)管理了,就變成僵尸進(jìn)程。
PS: 每個(gè)進(jìn)程都父進(jìn)程的PPID,子進(jìn)程則叫PID。
2.監(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)程 用戶(hù)、PID、占用cpu百分比、占用內(nèi)存百分比、狀態(tài)、執(zhí)行的命令等

| 狀態(tài) | 描述 |
|---|---|
| USER | 啟動(dòng)進(jìn)程的用戶(hù) |
| 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)核程序與終端無(wú)關(guān) |
| STAT | 進(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)有 [ ] 的是用戶(hù)態(tài)進(jìn)程。 |
2.STAT狀態(tài)的S、Ss、S、R、R+、S+等等,都是什么意思?

| 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)行 |
案例一、PS命令查看進(jìn)程狀態(tài)切換
#1.在終端1上運(yùn)行vim
[root@oldboy ~]# vim oldboy
#2.在終端2上運(yùn)行ps命令查看狀態(tài)
[root@oldboy ~]# ps aux|grep oldboy S表示睡眠模式,+表示前臺(tái)運(yùn)行
root 58118 0.4 0.2 151788 5320 pts/1 S+ 22:11 0:00 oldboy
root 58120 0.0 0.0 112720 996 pts/0 R+ 22:12 0:00 grep --color=auto oldboy
#在終端1上掛起vim命令,按下:ctrl+z
#3.回到終端2再次運(yùn)行ps命令查看狀態(tài)
[root@oldboy ~]# ps aux|grep oldboy #T表示停止?fàn)顟B(tài)
root 58118 0.1 0.2 151788 5320 pts/1 T 22:11 0:00 vim oldboy
root 58125 0.0 0.0 112720 996 pts/0 R+ 22:12 0:00 grep --color=auto oldboy
- 案例二、PS命令查看不可中斷狀態(tài)進(jìn)程
#1.使用tar打包文件時(shí),可以通過(guò)終端不斷查看狀態(tài),由S+,R+變?yōu)镈+
[root@oldboy ~]# tar -czf etc.tar.gz /etc/ /usr/ /var/
[root@oldboy ~]# 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@oldboy ~]# 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@oldboy ~]# 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/
平均負(fù)載初涉:
[root@oldboy ~]# w
16:52:23 up 32 min, 1 user, load average: 0.00, 0.01, 0.05
當(dāng)前系統(tǒng)時(shí)間 系統(tǒng)運(yùn)行總時(shí)長(zhǎng) 有多少個(gè)用戶(hù)運(yùn)行 一分鐘,5分鐘,15分鐘負(fù)載
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 16:21 7.00s 0.04s 0.00s w
- 2.使用top命令查看當(dāng)前的進(jìn)程狀態(tài)(動(dòng)態(tài))

| 任務(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)用戶(hù)進(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í)間 |
-
三、如何理解中斷
Linux軟中斷與硬中斷小結(jié)
Linux 中的中斷處理程序分為上半部和下半部:
上半部對(duì)應(yīng)硬件中斷,用來(lái)快速處理中斷。
下半部對(duì)應(yīng)軟中斷,用來(lái)異步處理上半部未完成的工作。
Linux 中的軟中斷包括網(wǎng)絡(luò)收發(fā)、定時(shí)、調(diào)度、等各種類(lèi)型,可以通過(guò)查看 /proc/softirqs 來(lái)觀察軟中斷的運(yùn)行情況。
- top 常見(jiàn)指令
| 字母 | 含義 |
|---|---|
| h | 查看幫出 |
| 1 | 數(shù)字1,顯示所有CPU核心的負(fù)載 |
| z | 以高亮顯示數(shù)據(jù) |
| b | 高亮顯示處于R狀態(tài)的進(jìn)程 |
| M | 按內(nèi)存使用百分比排序輸出 |
| P | 按CPU使用百分比排序輸出 |
| q | 退出top |