Hack 100. Nice コマンド

カーネルは、nice 値に基づいてプロセスにどのくらいプロセッサ時間が必要かを決定します。
有効な nice 値の範囲は -20 〜 20 です。
nice 値が -20 のプロセスは、優先順位が高くなります。
nice 値が 20 のプロセスは、優先順位が低くなります。


ps axl を使用して、以下に示すように実行中のプロセスすべての nice 値を表示します。

# ps axl 

F  UID    PID  PPID  PRI  NI    VSZ    RSS  WCHAN   STAT TTY TIME COMMAND
4    0      1     0  16    0   2172    552  -       S      ? 0:17 init [5]
1    0      3     1  34   19      0      0  ksofti  SN     ? 3:18 [ksoftirqd/0]
1    0     10     1   5  -10      0      0  worker  S<     ? 0:01 [events/0]
4    0   5145     1  25   10  32124  18592  -       SNs    ? 0:08 /usr/bin/python /usr/bin/rhn-applet-gui --sm-client-id default4
4    0   5147  5142  16    0   3528    604  -       S      ? 0:00 /sbin/pam_timestamp_check -d root
1  503  17552  4180  16    0  14208   3920  -       S      ? 0:01 /home/www/apache2/bin/httpd -f /home/www/apache2/conf/httpd.conf -k start

シェルスクリプトの優先順位を低くするには?(nice 値を大きくする)

以下の例では、nice-test.sh スクリプトをバックグランドで実行したときに、
nice 値は 0 になっています。

$ ./nice-test.sh &

[3] 13009

$ ps axl | grep nice-test

0 509 13009 12863 17 0 4652 972 wait S pts/1 0:00 /bin/bash ./nice-test.sh

[Note: 値が 0 である6番目のカラムが nice 値です]

では、以下に示すように nice 値を変えて同じシェルスクリプトを実行させましょう。

$ nice -10 ./nice-test.sh &

[1] 13016

$ ps axl | grep nice-test

0 509 13016 12863 30 10 4236 968 wait SN pts/1 0:00 /bin/bash ./nice-test.sh

[Note: 値が 0 である6番目のカラムがシェルスクリプトの nice 値です]

シェルスクリプトの優先順位を高くするには?(nice 値を低くする)

以下の例では、nice-test.sh スクリプトに nice 値 -10 を割り当てています。

$ nice --10 ./nice-test.sh &

[1] 13021

$ nice: cannot set priority: Permission denied

Note: root ユーザしか負の nice 値を設定できません。
root としてログインして同じことをしてみてください。
以下では nice コマンドの引数 10 の前に2つのハイフンがあることに注意してください。

# nice --10 ./nice-test.sh &

[1] 13060 

# ps axl | grep nice-test

4 0 13060 13024 10 -10 5388 964 wait S< pts/1 0:00 /bin/bash ./nice-test.sh

[Note: 値が -10 である6番目のカラムがシェルスクリプトの nice 値です]