進程表###
Linux進程表就像一個數(shù)據(jù)結(jié)構(gòu),它把當(dāng)前加載在內(nèi)存中的所有進程的有關(guān)信息保存在一個表中。
其中包括:進程PID,進程的狀態(tài)、命令字符和其他一些ps命令輸出的各類信息。
操作系統(tǒng)通過繼承的PID對它們進行管理,這些PID是進程表的索引。
早期的進程表的長度是有限制的,所以支持同時運行的-進程也是有限的。早期的UNIX系統(tǒng)只能夠同時運行256個進程。最新的實現(xiàn)版本已大幅度放寬這一限制,可以同時運行的進程數(shù)可能只與用于建立進程表項的內(nèi)存容量有關(guān),而沒有具體的數(shù)字限制了。
查看進程###
ps 命令顯示我們正在運行的進程,其他用用戶正在運行的進程或者目前在系統(tǒng)上運行的所有進程。樣本:

TTY 一列顯示進程是從哪一個終端啟動的(這里是mac,??應(yīng)該是圖形界面啟動),TIME一列是進程目前為止所占用cpu時間,CMD一列顯示啟動進程所使用的命令。
默認(rèn)情況下,
ps程序只顯示與終端、主控制臺、串行口和偽終端保持連接的進程的信息。
其他的進程在運行時不需要通過終端與用戶進行通訊,它們通常都是一些系統(tǒng)進程,Linux用他們管理共享的資源??梢允褂胮s -a 查看所有進程,用-f顯示進程的完整信息。
11.2.3 系統(tǒng)進程

STAT一列表明進程的當(dāng)前狀態(tài)。
STAT中常見的代碼:


其他的系統(tǒng)里面可能顯示為:1 ? Ss 0.03 init [5]
一個進程一般是由父進程來進行啟動的,被父進程啟動的進程是子進程。linux啟動的時候會運行一個init程序,它的進程號為1?!究梢詫nit進程看作為進程的管理器,它是其他所有進程的祖先進程】所以,其他進程要么是被init進程啟動,要么是被init進程啟動的其他進程啟動的。
eg: 用戶登錄的處理過程。
init進程為每個用戶用來登錄的串行終端或撥號調(diào)制解調(diào)啟動一次getty程序。對應(yīng)的ps命令輸出如下:
9619 tty2 Ss+ 0:00 /sbin/mengetty tty2
getty 進程等待來自終端的操作,向用戶顯示熟悉的登錄提示符,然后把控制移交給登錄程序,登錄程序設(shè)置用戶環(huán)境,最后啟動一個shell。用戶退出系統(tǒng)時,init進程將再次啟動另外一個getty進程?。
啟動新進程等待它們結(jié)束的能力是整個系統(tǒng)的基礎(chǔ)。
11.2.4 進程調(diào)度

這表明進程2195處于運行狀態(tài)(R),正在運行的命令是ps ax。(也就是這個進程出現(xiàn)在自己的輸出結(jié)果中)[這個狀態(tài)指示符只表示已準(zhǔn)備好運行,并不意味它正在運行](在一臺但處理器的計算機上,同一時間只能有一個進程可以運行,其他進程處于等待狀態(tài),每個進程輪到的運行時間(時間片)是相當(dāng)短暫的),這就給我們一種多個程序在同時運行的假象。狀態(tài)R+只是表示這個程序是前臺任務(wù),它不是在等待其他進程結(jié)束或等待輸入輸出完成。這就是為什么我們可能在ps命令的輸出結(jié)果中可以看到兩個這樣的進程的愿意(另一個常見的標(biāo)記為正在運行的繼承是X顯示服務(wù)器)【一個x 服務(wù),一個是當(dāng)前自己的進程】???
????但是這里還是有點不是很懂?。。?/p>
Linux內(nèi)核決定了下一個時間片段該分配給哪一個進程,它的判斷依據(jù)是進程的優(yōu)先級(第4章講到)【優(yōu)先級高的進程運行的更加頻繁,低級的就沒有這么頻繁】
linux中的進程的運行時間不可能超過分配給他們的時間片段,Linux上是使用搶先式多任務(wù)處理,所以,任務(wù)的掛起和繼續(xù)運行是不需要彼此之間的協(xié)作。
(nice值的意思)
linux是一個多任務(wù)系統(tǒng),所以進程之間可能存在競爭統(tǒng)一資源的問題。這種情況下,執(zhí)行短期的突發(fā)性工作并暫停運行來等待輸入的程序,要比持續(xù)占用處理器進行計算或不斷輪詢系統(tǒng)來查看是否有新的輸入到達的程序更好。(√)表現(xiàn)良好的程序為nice程序,而且在某種意義上,這個nice是被計算出來的。
操作系統(tǒng)根據(jù)這個進程的nice值來決定它的優(yōu)先級,一個進程的nice值默認(rèn)是0并將根據(jù)這個程序的表現(xiàn)而不斷變化。(長期不間斷的運行的程序優(yōu)先級一般比較低,eg:暫停來等待輸入的程序會得到獎勵), 這樣就可以幫助與用戶進行交互的程序保持及時的響應(yīng)性。在程序等待用戶輸入程序的時候,系統(tǒng)會增加它的優(yōu)先級,這樣子,當(dāng)他準(zhǔn)備運行的時候,它就會有較高的優(yōu)先級而能夠優(yōu)先執(zhí)行。
[nice命令設(shè)置nice的值,是用renice命令調(diào)整他的值]若是,nice命令將進程的nice值增加10 ,就會降低該進程的優(yōu)先級。ps -l 或者-f查看nice值。

若是使用下面命令啟動:
nice oclock &
它將會被分配到+10的nice值。

上圖可以查看到對應(yīng)的nice的值都會增加10,這個是時鐘程序就不會運行得那么頻繁了。狀態(tài)欄(S列)含有N表示這個進程的nice值已經(jīng)被修改了(不是默認(rèn)值了)
PPID 為父進程的ID,它是啟動這個進程的PID,如果原來的進程已經(jīng)不存在了,該欄就顯示為init進程的進程ID(PID=1)