Linux下的進程管理
在Windows中分為進程和線程,而這些概念在Linux中同樣適用,而所謂的進程process既是資源分配的單位,一個進程的發(fā)起想要調(diào)度CPU進行執(zhí)行則需要或得CPU的時間片,同樣在獲得CUP的時間片后,還有相應(yīng)的優(yōu)先級,從而才能有序的執(zhí)行。在進程的發(fā)起后狀態(tài)分為:Running運行、Ready就緒、Sleep睡眠、Stop停止、Zomebie僵死;這些狀態(tài)的意思顧名思義相信大家都可以理解。
在windows中我們通?梢哉{(diào)出資源管理器查看當(dāng)前執(zhí)行的進程,而在Linux中有一個進程樹(pstree)可以詳細的形象的展示出Linux中的進程關(guān)系。
1、顯示當(dāng)前系統(tǒng)上運行的前臺進程可以用命令:ps
而在這里的一些參數(shù)一部分是按照BSD的格式進行使用的,也有一部分是按照sysV格式的顯示
參數(shù):aux:顯示當(dāng)前系統(tǒng)上的所有進程(也是我們經(jīng)常用的組合) #ps aux
x:顯示出跟終端不相關(guān)的進程
a:顯示出跟終端相關(guān)的進程 #ps au:以進程發(fā)起的用戶為開頭顯示
-e:顯示所有進程
-f:顯示詳細信息 通常使用-ef組合 #ps -ef
-ejH=axjf:按照進程的父子關(guān)系進行自動縮進
o:依照用戶的設(shè)置格式進行顯示 #ps axo pid,tty,cmd,stat
2、有時服務(wù)器運行著大量的進程時,需要查找到某個進程,并查看其信息時則用到:
pgrep:查找進程
參數(shù):-U:根據(jù)用戶的UID查找其發(fā)起的相應(yīng)進程
-G:根據(jù)用戶的GID查找其發(fā)起的相應(yīng)進程
-t:查找跟終端相關(guān)的進程
-P:查找父進程為某一個子進程
pidof:查找某些進程的id號
例如:#pidof bash
3、在進程信息顯示中,可以看到STAT中有很多的符號,其意義
S:可中斷的睡眠狀態(tài)
R:運行態(tài)
D:不可中斷的睡眠態(tài)
T:停止態(tài)
Z:僵死態(tài)
<:高優(yōu)先級的進程
s:會話進程的發(fā)起者
N:低優(yōu)先級的進程
l:多線程的進程
+:前臺進程
通過分析這些進程的狀態(tài),我們可以根據(jù)實際情況對其采取想要的操作,以達到對服務(wù)器的調(diào)優(yōu)以及對某些服務(wù)的重置。
4、說到對這些進程進行操作,這就得提到信號(Signal)
#kill -l:查看所有的信號,其中前面的數(shù)字為信號的代號,后面則為名字
經(jīng)常用到的幾個信號:
1)SIGHUP:通知某一個進程重讀自己的配置文件卻不用重啟
2)SIGINT:類似于ctrl+c取消
9)SIGKILL:殺死某進程
15)SIGTERM:終止
18)SIGCONT:繼續(xù)
19)SIGSTOP:停止
使用kill來發(fā)送信號:
kill -SIGNAL_NU PID #kill -15 2887 對進程ID為2887的進程發(fā)出終止信號
kill -SIGNAL_NU PROCESS #kill -15 httpd 終止httpd服務(wù)
5、在上面提到一個進程的發(fā)起到執(zhí)行是安裝其優(yōu)先級的高低來進行執(zhí)行順序的,所以在說一說進程的優(yōu)先級
優(yōu)先級分為:動態(tài)優(yōu)先級(進程的發(fā)起時內(nèi)核自動計算的)、靜態(tài)優(yōu)先級(可手工調(diào)整)
通常情況下:I/O 設(shè)備的優(yōu)先級要高,但是獲取的CPU時間片短,當(dāng)你鍵入一個字母或移動下鼠標(biāo)時,CPU就會立即進行相應(yīng),并執(zhí)行,這就是因為I/O設(shè)備的優(yōu)先級較高
多媒體之類的這些進程優(yōu)先級就較低,但是獲取的CPU時間片長,因為一個音樂或電影的打開,一般就會一直執(zhí)行下去。而這些進程的優(yōu)先級大部分都是系統(tǒng)內(nèi)核自動計算的。
靜態(tài)優(yōu)先級的調(diào)整用過調(diào)整nice值來進行調(diào)整的,而普通用戶在調(diào)整一個進程的優(yōu)先級時,只能在進程優(yōu)先級的基礎(chǔ)上將其調(diào)低,而不能將其調(diào)高,管理員root則沒有限制;nice值:-20---19分別對應(yīng)優(yōu)先級100---139,nice值越小,優(yōu)先級值也越低,從而其優(yōu)先級越高,而在一個進程的發(fā)起時其nice值一般默認的都是0;
nice:在進程啟動時直接賦予一個值
格式:nice -n NU COMMAND
例如:#nice -n 15 ftp 192.168.0.254
查看其nice值
renice:在進程啟動后進行nice值的修改
格式:renice # PID
例如:#renice 2 3133
6、后臺狀態(tài)
當(dāng)一個命令執(zhí)行的時間較長,例如我們拷貝一個大文件,而此時他沒有執(zhí)行結(jié)束,我們是不能進行其他的操作的,但是我們又需要進行其他的操作,這時就可以將它移至后臺: 查看后臺任務(wù):jobs
從前臺轉(zhuǎn)移到后臺:ctrl+z 俗稱掛起,在后臺停止了,并不繼續(xù)執(zhí)行
從后臺轉(zhuǎn)移到前臺:fg 默認調(diào)回的是有加號的
從后臺轉(zhuǎn)移到前臺一個特定的進程:fg %NU
將后臺的某個進程讓它繼續(xù)執(zhí)行:bg %nu
使一個進程和一個中斷沒有關(guān)系:nohup COMMAND
啟動命令時直接將其送到后臺:startx &
結(jié)束后臺的某個進程:kill %NU
在結(jié)束后臺任務(wù)2時,進程狀態(tài)由Stopped變到Terminated最后結(jié)束,后臺只剩下一個任務(wù)了。