nice
コマンドと
renice
コマンドを使用すると、優先順位を調整することで、カーネルによるプロセスの処理方法を微調整できます。 Linux や macOS などの Unix 系オペレーティング システムでこれらを使用する方法については、このチュートリアルを読んでください。
すべてはプロセスの問題です
Linux または Unix 系のコンピュータ内では、使用するアプリケーションを起動する前から多くのプロセスが実行されています。これらのプロセスの大部分は、Linux 自体の重要な要素、またはグラフィカル デスクトップ環境のサポート プロセスです。舞台裏ではたくさんのことが起こっています。もちろん、使用できるシステム リソースと CPU 時間には限りがあります。 Linux カーネルは、これらすべてのプロセスのコントローラーです。
現在どのプロセスに注目とリソースを与え、どのプロセスを待たなければならないかを決定するのはカーネルです。カーネルは、コンピュータが可能な限りスムーズに動作し、すべてのプロセスが適切なシェアを獲得できるように、プロセスと優先順位を継続的に調整します。一部のプロセスは優遇されます。これらはコンピュータの一般的な操作にとって非常に重要であるため、そのニーズは、たとえばブラウザよりも優先される必要があります。
素敵な価値
カーネルがプロセスをどのように扱うかを決定するために使用される基準の 1 つは、nice 値です。すべてのプロセスには素晴らしい価値があります。 nice 値は、-19 ~ 20 の範囲の整数です。すべての標準プロセスは、nice 値 0 で起動されます。
ここでのコツは、nice 値が高くなるほど、プロセスが他のプロセスに対してより適切になるということです。言い換えれば、nice 値が高いと、このプロセスが喜んで待機することがカーネルに伝えられます。負の数は親切の反対です。負の nice 値が大きいほど、プロセスはより利己的になります。他のプロセスに関係なく、できるだけ多くの CPU 時間を取得しようとします。
nice
コマンドを使用して
プロセスの起動
時に nice 値を設定でき、
renice
を使用して
実行中のプロセスの
nice 値を調整できます。
素敵なコマンド
nice
コマンドを使用すると、プログラムを起動するときにそのプログラムの nice 値を調整できます。これにより、カーネルによってプロセスに与えられる優先度を、他のプロセスと比較して増減させることができます。
プログラマーが
ackermann
というプログラムを作成したとします。これは
アッカーマン関数
を計算します。 CPU とメモリを大量に消費します。プログラマは次のコマンドを使用してプログラムを起動できます。
./アッカーマン
top
コマンドを使用して、実行中のプログラムを表示できます。
上
ackermann
プログラムの詳細は
top
で確認できます。素敵な値は「NI 列」の数値です。予想通り、ゼロに設定されました。
再起動して、今度は要求を緩和しましょう。次のように、
ackermann
プログラムに適切な値 15 を設定します。 nice、スペース、-15、さらにスペースを入力し、起動するプログラムの名前を入力します。この例では、架空のプログラマーが
./ackermann
を使用しています。
いいですね -15 ./アッカーマン
「-15」はマイナスの 15 ではないことに注意してください。正の15です。 「-」はパラメータを渡している
nice
を伝えるために必要です。負の数値を示すには、2 つの「-」文字を入力する必要があります。
ここで再び
top
を開始すると、
ackermann
の動作の変化がわかります。
上
値が 15 であるため、
ackermann
は最も多くの CPU 時間を消費していません。 GNOME と Rhythmbox はどちらも使用量が増えています。
ackermann
を少し手綱にしました。
次に、逆のことを行って、
ackermann
負の nice 値を与えてみましょう。 2 つの「-」文字の使用に注意してください。アプリケーションをより利己的であまり良くないものにするには、
sudo
を使用する必要があります。アプリケーションをより優れたものにすることは誰でもできますが、アプリケーションをより利己的なものにできるのはスーパーユーザーだけです。
sudo nice --10 ./ackermann
トップを実行して、それがどのような違いを生んだかを見てみましょう。
上
今回の
ackermann
-10という嬉しい値を持っています。最上位に戻り、以前よりも多くの CPU 時間を消費します。
レニスコマンド
renice
コマンドを使用すると、実行中のプロセスの nice 値を調整できます。停止して
nice
で再起動する必要はありません。新しい値をその場で設定できます。
renice
コマンドは、プロセスのプロセス ID (PID) をコマンド ライン パラメーターとして受け取ります。プロセス ID は、
top
の「PID」列から抽出することも、次のように
ps
と
grep
を使用して見つけることもできます。明らかに、
dave
の代わりにユーザーの名前を入力し、
ackermann
の代わりに関心のあるプロセスの名前を入力します。
ps -eu デイブ |グレップ・アッカーマン
PID を取得したので、これを
renice
で使用できます。
ackermann
、適切な値 5 を使用して、より適切な動作に戻します。実行中のプロセスの nice 値を変更するには、
sudo
を使用する必要があります。
5
パラメータには「-」がないことに注意してください。正の数の場合は 1 つ必要ありません。負の数の場合は 2 つではなく 1 つだけ必要です。
sudo レニス -n 5 2339
renice
が nice 値を変更したという確認が得られます。それは私たちに古い価値と新しい価値を示します。
通常、カーネルは優先順位を処理し、CPU 時間とシステム リソースを分配するという優れた仕事をします。ただし、CPU を大量に消費する長時間のタスクを実行していて、そのタスクがいつ終了するか気にしない場合は、そのタスクに高い nice 値を設定すると、コンピューターの動作が少しスムーズになります。その方が誰にとっても良いことになるでしょう。
関連: 開発者と愛好家のための最高の Linux ラップトップ





