1.什么是進(jìn)程
當(dāng)我們運(yùn)行一個(gè)程序,那么我們將運(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)行的過(guò)程中,系統(tǒng)會(huì)有各種指標(biāo)來(lái)表示當(dāng)前的狀態(tài)
2.進(jìn)程和程序的區(qū)別
程序是數(shù)據(jù)和指令的結(jié)合,是一個(gè)靜態(tài)的概念。比如/bin/ls,/bin/cp等二進(jìn)制文件。同時(shí)程序可以長(zhǎng)期存在系統(tǒng)中。
進(jìn)程是程序運(yùn)行的過(guò)程,是一個(gè)動(dòng)態(tài)的概念,進(jìn)程是存在生命周期概念的,也就是說(shuō)進(jìn)程會(huì)隨著程序的終止而銷毀,不會(huì)永久存在系統(tǒng)中。
進(jìn)程.jpg
當(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。
監(jiān)控進(jìn)程的狀態(tài)信息
程序運(yùn)行后查看進(jìn)程的狀態(tài)分為:靜態(tài)和動(dòng)態(tài)兩種方式
1.用ps查看當(dāng)前的進(jìn)程狀態(tài)(靜態(tài))
截圖.png
狀態(tài) | 描述 |
---|---|
USER | 啟動(dòng)進(jìn)程的用戶 |
PID | 進(jìn)程運(yùn)行的ID號(hào) |
%CPU | 進(jìn)程占用cpu的百分比 |
%MEM | 系統(tǒng)占用內(nèi)存百分比 |
VDG | 進(jìn)程占用虛擬內(nèi)存大小 |
RSS | 進(jìn)程占用物理內(nèi)存實(shí)際大小 |
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 |
START | 進(jìn)程的啟動(dòng)時(shí)間 |
TIME | 進(jìn)程占用cpu的總時(shí)間(為0表示沒(méi)超過(guò)秒) |
COMMAND | 程序的運(yùn)行指令[]屬于內(nèi)核態(tài)的進(jìn)程。沒(méi)有[]的是用戶態(tài)的進(jìn)程 |
進(jìn)程運(yùn)行的狀態(tài)指標(biāo)
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@xuliangwei ~]# vim oldboy
#2.在終端2上運(yùn)行ps命令查看狀態(tài)
[root@xuliangwei ~]# 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@xuliangwei ~]# 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@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/
使用top命令查看當(dāng)前進(jìn)程截圖1.png
任務(wù) | 含義 |
---|---|
Tasks: 104 total | 總進(jìn)程數(shù) |
1 running | 運(yùn)行進(jìn)程數(shù) |
103 sleeping | 睡眠進(jìn)程數(shù) |
0 stopped | 停止進(jìn)程數(shù) |
0 zombie | 僵尸進(jìn)程 |
%Cpu(s): 0.0 us | 系統(tǒng)用戶進(jìn)程使用cpu百分比 |
0.0 sy | 內(nèi)核中進(jìn)程占用cpu百分比,通常內(nèi)核是于硬件進(jìn)行交互 |
0.0 ni | |
100.0 id | 空閑cpu百分比 |
0.0 wa | cpu等待io完成時(shí)間 |
0.0 hi | 硬中斷占的cpu百分比 |
0.0 si | 軟中斷占的cpu百分比 |
0.0 st | 比如虛擬機(jī)占用物理cpu時(shí)間 |
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 |