Unix で実行中のすべてのプロセスには、優先度が割り当てられています。
nice および renice ユーティリティを使用して、プロセスの優先度を変更できます。 Nice コマンドは、ユーザー定義のスケジューリング優先順位でプロセスを起動します。 Renice コマンドは、実行中のプロセスのスケジューリング優先度を変更します。
Linux カーネルはプロセスをスケジュールし、それぞれに応じて CPU 時間を割り当てます。ただし、CPU 時間を増やすためにプロセスの 1 つに高い優先度が必要な場合は、このチュートリアルで説明されているように、nice コマンドと renice コマンドを使用できます。
プロセスのスケジューリング優先度の範囲は -20 から 19 です。これを適切な値と呼んでください。
-20 のナイス値は最高の優先度を表し、19 のナイス値はプロセスの最低の優先度を表します。
デフォルトでは、プロセスが開始されると、デフォルトの優先度 0 が取得されます。
1.プロセスの優れた価値を表示する
プロセスの現在の優先度は、ps コマンドを使用して表示できます。
ps コマンド出力の「NI」列は、プロセスの現在のナイス値 (優先度) を示します。
nice および renice コマンドのデモンストレーションに使用される test.pl というテスト プログラムを起動します。このテスト プログラムは特定のタスクを実行し、しばらくの間実行されます。
$ perl test.pl
以下に示すように ps コマンドを実行すると、この test.pl プログラムのデフォルトの nice 値が 0 であることがわかります (次の出力の NI 列を見てください)。
$ ps -fl -C "perl test.pl" F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 0 R bala 6884 6424 99 80 0 - 1556 - 13:45 pts/3 00:05:54 perl test.pl
2.優先度の低いプログラムを開始する
デフォルトの優先度でプログラムを起動する代わりに、nice コマンドを使用して特定の優先度でプロセスを起動できます。
この例では、test.pl はナイス値 10 で起動されます。
$ nice -10 perl test.pl
注: 上記のコマンドの -10 は、プロセスの優先度を 10 に設定することを思い出してください。nice コマンドの – は、コマンドにオプションを渡すために使用するハイフンを表します。
したがって、nice 値の 5 を渡すには、-5 とします。 nice 値 6 を渡すには、-6 とします。
以下に示すように、このプログラムは現在、nice 値 10 で起動されています。これは、デフォルトで起動される他のプログラムと比較して、低い優先度で実行されることを意味します。
$ ps -fl -C "perl test.pl" F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 0 R bala 7044 6424 99 90 10 - 1556 - 13:58 pts/3 00:00:03 perl test.pl
3.優先度の高いプログラムを開始
優先度の高いプログラムを起動することもできます。負のナイス値は、プロセスの優先度を上げます。そのため、以下に示すように、nice コマンドの前に — (2 つのハイフン) を付けて値を指定する必要があります。
# nice --10 perl test.pl
したがって、-5 のナイス値を渡すには、5 の前に 2 つのハイフンを追加します。-6 のナイス値を渡すには、6 の前に 2 つのハイフンを追加します。
以下に示すように、このプログラムは -10 というナイス値で起動されます。これは、デフォルトで起動される他のプログラムと比較して、より高い優先度で実行されることを意味します。
# ps -fl -C "perl test.pl" F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 R root 3534 3234 99 70 -10 - 1557 ? 19:06 pts/1 00:00:56 perl test.pl
注:通常のユーザーは、優先度の高いプログラムを起動することはできません。優先度の高いプログラムを起動できるのは root ユーザーのみです。
通常のユーザーとして、優先度を上げると、nice コマンドから次のエラー メッセージが表示されます。
$ nice --10 perl test.pl nice: cannot set niceness: Permission denied
上記のエラー メッセージを出力した後も、プログラムはデフォルトの優先度 (つまり :0) で引き続き実行されることに注意してください。
4.オプション -n で優先度を変更
プロセスの優先度は、-n オプションを使用して調整できます。
優先度を上げる:
# nice -n -5 perl test.pl
優先度を下げる:
# nice -n 5 perl test.pl
5.実行中のプロセスの優先度を変更する
既に実行中のプロセスの優先度は、renice コマンドを使用して変更できます。
この例では、プログラム test.pl は既にナイス値 -10 で実行されています。
# ps -fl -C "perl test.pl" F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 R root 3534 3234 99 70 -10 - 1557 ? 19:06 pts/1 00:00:56 perl test.pl
以下に示すように、上記のプログラムのナイス値を -19 に変更できます。上記プログラムのプロセス ID を -p オプションに渡します。
# renice -n -19 -p 3534
nice 値が -19 に変更されたことを確認してください。
# ps -fl -C "perl test.pl" F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 R root 3534 3234 99 70 -19 - 1557 ? 19:06 pts/1 00:00:56 perl test.pl
6.グループに属するすべてのプロセスの優先度を変更
-g オプションを使用すると、グループに属するすべてのプロセスの優先度を変更できます。次のコマンドは、geekstuff に属するすべてのプロセスの nice 値を 5 に変更します。
# renice -n 5 -g geekstuff
7.ユーザーが所有するすべてのプロセスの優先度を変更
Renice では、以下に示すように、特定のユーザーが所有するすべてのプロセスの優先度を変更できます。
# renice -n 5 -u bala
上記のコマンドは、ユーザー bala が所有するすべてのプロセスの優先度を変更します。ユーザー bala に属するすべてのプロセスにナイス値 5 を割り当てます。
# ps -fl -C "perl" F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 0 R bala 2720 2607 99 85 5 - 1556 - 14:34 pts/2 00:05:07 perl test.pl 0 R bala 2795 2661 99 85 5 - 1556 - 14:39 pts/3 00:00:09 perl 2.pl