Linuxにおけるプロセスの実行優先順位

他人数かつ多数のプロセスを扱うシステムでは、実行するプロセスの実行優先順位を変更したくなるケースがあります。Linuxではそれを制御するためにナイス値と呼ばれる優先度をもっています。この値は全てのプロセスが持っています。

確認するためには、「ps l」コマンドを実行します。「NI」の項目が優先度です。

実際に実行して確認してみるとわかりますが、大抵のプロセスにはNI値として「0」が入っているかと思います。これはシステムの規定値となり、特に指定しない場合は優先度0で実行されます。

優先度の範囲は、ー20(最高)から19(最低)までの数値が割り当てられています。ナイス値が小さければ小さいほど、より優先的にCPUを使用することができます。規定値の0はちょうど真ん中ですね。




niceコマンド

前述の通り、特に指定無く各種のコマンドを実行した場合には、プロセスの優先度はシステムの規定値である0となりますが、niceコマンドを使用することにより、優先度を指定してコマンドを実行することができます。

コマンドの書式はシンプルです。

書式
nice -n <ナイス値> コマンド名

niceコマンドを実行した場合で、ナイス値を設定しない場合は「10」が自動的に指定されます。通常のプロセスより若干優先度が劣る事になりますので、意図していない場合は注意して、極力明示的に設定するようにしましょう。

なお、一般ユーザーは、自分が実行しているプロセスの優先度しか操作・変更することができません。また、現在の優先度よりも大きなナイス値を指定することはできますが、より小さなナイス値は指定することができません。

これは、一般ユーザーが自分のプロセスに高い優先度を設定して、より重要なシステム管理プロセスに影響を及ぼさないようにするためです。勝手に速く動作させることはできませんが、実行優先度を下げる分には各自ご自由に、といった発想となっています。

コマンドの書式でマイナス値を設定する場合には少々注意が必要です。

例として、マイナス値「-10」を設定する場合には、オプションに「-n -10
」または「ーー10」を指定します。後半のオプションの指定方法はややこしいので注意しましょう。ハイフンが2つ連続していますが、1文字目のハイフンはオプションを意味するハイフンで、2文字目のハイフンがマイナスの意味のハイフンになります。

reniceコマンド

すでに実行中のプロセスの優先度を変更するには、reniceコマンドを使用します。niceコマンドと異なり、たとえばマイナス値「-10」を設定する場合には「-10」と指定します。オプションのハイフンはつけないので注意してください。

書式
renice <ナイス値> <プロセスID>

どういった時にniceコマンドやreniceコマンドを利用するのでしょうか。よくあるケースがバックアップのプロセスです。大きなシステムで、ログなどをバックアップしたい場合に、gzipコマンドなでどでバックアップを行うと膨大な時間がかかる時があります。下手をすると何時間もかかってしまいますが、そういった際にその圧縮処理に時間をかけてしまうと、本来即時に実行したいプロセスの結果が返ってくるまでに余計な時間がかかってしまいます。

そこで、即時性の低いバックアップのプロセスを優先度を下げて実施することで、相対的に他のプロセスを素早く動作させることができます。