進程:即process,由於系統的資源是有限的,所以要合理的分配有限的資源,這也是需要進程管理的原因。
進程的資源: CPU 一般是命令的處理。
記憶體 32bit的CPU所能支援的最大記憶體為4G。
一個進程可以理解為一個程式,進程與進程在記憶體中不知道對方的存在,在LINUX裡進程調度(scheduling)是核心中非常重要的一個系統。舉個例子來解釋下進程之間的調度。
對於FTP伺服器,要經常的讀寫,屬於I/O密集型,而高畫質 DVD則需要解碼,所以需要佔用CPU較大的資源。這裡引入進程優先順序的概念,比如一邊看電影,一邊聊QQ,想象一下,如果CPU全力解碼,是不是不會延遲處理鍵盤的輸入資訊? 這時候,CPU盡量給電影,但是QQ的優先順序更高,在這裡,QQ的I/O被縮短了,但是相應的優先順序別更高了,這也是可以一邊聊QQ一邊看電影的原因。
進程有限級分為:靜態優先順序和動態優先順序,在LINUX中用數值分別代表他們的優先順序,數值越小優先順序越高。
靜態優先順序:100~139,可以手動調整,有一個數值nice,專門用來表示可以增加或減少優先順序數值的大小。
動態優先順序:0~99 被稱為即時優先順序,動態優先順序永遠大於靜態優先順序
nice值的範圍為-20~19,普通使用者只能調高自己的nice值,只有root使用者有權調低。
調整NICE值命令
nice -n 6 COMMAND //只有管理員才可以降
renice : 對已經啟動過的進程調整nice值
renice N PID //打算將nice調整到幾
#為什麼叫nice值,可以這樣理解,一個進程優雅的把自己的資源讓給了別的進程,這個動作很優雅(nice)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
查看進程的命令ps:
ps命令由於當時UNIX兩大陣營的分隔,各自出現了一種書寫風格 :sys V風格(無-)和BSD風格(有-)
ps : process state
-e show all process
a 和終端無關的進程
x 和終端有關的進程
-u 顯示進程發起使用者
-F 顯示額外資訊你
-f 顯示完整資訊
j 以作業的方式顯示
h 顯示進程間的關係
o 自訂顯示一方面資訊
pstree 顯示當前進程數
常用的組合
ps -eo pid //%cpu,comm
ps eF
ps -ejh
ps axjf
ps aux //最常用的ps命令
ps裡的各項數值說明
PID:進程號 PPID:父進程 TTY 終端裝置 STAT:程式運行狀態 RRS:實際記憶體佔用 VSZ:虛擬記憶體佔用
對於STAT分為:運行態 running
就緒態 ready I/O完成
停止態 stopped 必須管理員手動喚醒
睡眠態 sleep 等待使用者輸入資料或者正在讀取硬碟資料
sleep不可以直接進入running
sleep: 不可中斷 uninterruptible sleep
可中斷 interruptible sleep
D:不可中斷的睡眠
R:正在運行或準備好運行
R:可中斷的睡眠
T:停止態
Z: Zombie殭屍態
< : 高優先順序進程
N : 低優先順序進程
+ : 屬於某一個前台進程組的進程
s :某一個進程組的leader進程
l :多線程的進程
成為殭屍進程的原因 : 1 進程執行完了沒有釋放記憶體
2 進程正在釋放記憶體( 正常)
進程的有趣現象 : linux裡父進程回收子進程:白髮人送黑髮人
孤兒進程orphin:父進程死了,子進程還存在
init進程負責回收orphin,它是一切進程的父進程,所有的進程都是通過複製它而來