在 Linux 中每個執行中的程式都會有一個 niceness 值,系統的 scheduler 在對每個行程在排程時,就會參考這個數值來決定執行的先後順序,niceness 可用的數值從 -20(最高優先權)到 19(最低優先權),數值越小代表執行優先權越高。這裡介紹如何使用 nice 指令指定程式執行時的 niceness 值。

niceness 與排程優先權(scheduling priority)是不一樣的,排程優先權是真正決定程式執行的先後順序,而 niceness 值只是提供給 scheduler 參考用,scheduler 甚至可以忽略這個值。


這是 nice 指令的使用方式:

nice -n NUM COMMAND

其中 COMMAND 是要執行的程式,而 NUM 就是指定此程式在執行時的 niceness 值。以下是一些使用範例:

Example 1
若直接執行 nice 不加任何參數,則會輸出現行的 niceness 值:

nice

輸出為:

0

Example 2
指定 niceness 值為 3:

nice -n 3 command-name

Example 3
執行 nice 如果不指定 niceness,則預設會把現行的 niceness 加 10:

nice nice

輸出為:

10

Example 4
只有 root 可以指定小於 0 的 niceness 值,一般使用者無法指定小於 0 的 niceness 值。

nice -n -1 nice

輸出為:

nice: cannot set niceness: Permission denied
0
sudo nice -n -1 nice

輸出為:

-1

Example 5
如果指定超過 19 的 niceness 值,nice 會直接使用 19 做為 niceness 值。

nice -n 10000000000 nice

輸出為:

19

參考資料:nixCraft鳥哥的 Linux 私房菜