Linux 調整行程的優先度
多工系統中,每個處理程序的資源都不一樣,基本上系統會自動分配適當的資源,但我們可以調整處理程序的優先程度,來讓某些處理程序優先獲得較多的資源。
當調整處理程序的優先程度時,會參考到一個稱為 Nice number 的參數,此參數是使用者以 nice 指令提供的。
Nice number 代表處理程序在系統上的合群程度,數值越高,代表越夠將資源讓出來。
也就是說,Nice number 越高,優先度被往下修的幅度就越大;相反的,Nice number 越低,優先度被往上修的幅度就越大。
Nice number 的有效數值範圍從 -20 到 +19,負的 Nice number 會提高優先度,正的 Nice number 會降低優先度,預設為 0。
任何使用者皆僅能以正的 Nice number 來啟動處理程序,只有 root 可以負的 Nice number 來啟動處理程序。
$ nice [-n adjustment] [command]
$ nice [-adjustment] [command]
對一般使用者 adjustment 有效範圍是 1 到 19,只有 root 是 -20 到 19,如果沒有指定 adjustment 來使用 nice 則預設為 10。
command 可以是任何有效的 shell 指令。
下列指令以 nice 去執行掃毒程式(clamdscan),並且讓該程式以低優先度,於背景環境中進行郵件目錄的掃描。
$ nice clamdscan --quiet -l ~/log/vscan.log ~/maildir &
另外如果我們是 root,且發現有外部 IP 正在惡意攻擊我們本機的伺服器,導致本機系統的反應遲鈍時,透過 /etc/hosts.deny 來將對方加入黑名單。
透過 nice 提供 vi 的優先度,也同時排擠造成系統遲鈍的處理程序。
$ nice -n -10 vi /etc/hosts.deny $ nice --10 vi /etc/hosts.deny
nice 指令只能在程式啟動時,調整 Nice number ,對於已經在運作中的處理程序,則使用 renice 來改變其 Nice number。
$ renice [+|-]nicenumber [option] targets
targets 代表將調整的處理程序的 PID
[+|-]nicenumber 則新的 Nice number
將 PID 501 的優先度降到最低(Nice number 變最高)
$ renice 20 501
調高使用者 tom 的所有處理程序
$ renice -10 -u tom