Linux 調整行程的優先度

許聖泉 Michael Hsu
3 min readFeb 27, 2019

多工系統中,每個處理程序的資源都不一樣,基本上系統會自動分配適當的資源,但我們可以調整處理程序的優先程度,來讓某些處理程序優先獲得較多的資源。

當調整處理程序的優先程度時,會參考到一個稱為 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

--

--