実行中のプロセスを再割り当てして、多かれ少なかれ優先順位(いわゆる「ナイスバリュー」)を与えることができます。UNIXの優先度スケールはやや直観に反していることに注意してください。負の値は、プロセスが同時プロセスよりも優先されることを意味します。つまり、「より多くの」優先度があります。
したがって、PIDを指定してプロセスを「スローダウン」することを試みることができます。
# lower priority of a process
renice +1 "PID"
これを実行するたびに、プロセスの「nice value」が1ずつ増加します。+1
もちろん、整数値以外も使用できます。
コマンドniceを使用すると、+ 10のnice値を調整してプロセスを開始できます(オプションでこれを変更します-n
)。例えば:
# start a CPU-intensive task with low priority
nice ./cpu-hog
ただし、「ナイスバリュー」は、スケジューラがシステム内の他のプロセスよりも特定のプロセスの実行を優先する程度にのみ影響します。コンピュータが基本的にアイドリングの場合、1つのプロセスの「ナイスバリュー」を上げても、そのプロセスが100%を占めることはありません。 CPU。私はgetpriority(2)のマンページから引用します:(Emphasis added me。)
それらの相対的なnice値がプロセスのスケジューリングに影響する度合いは、Unixシステム間で、またLinuxではカーネルバージョン間で異なります。カーネル2.6.23から、Linuxは、nice値の相対的な違いがはるかに強い効果を持つアルゴリズムを採用しました。これにより、非常に低いnice値(+19)が原因
で、システムに他の _より高い優先度の負荷がある場合は常に、CPUがプロセスにほとんど提供されなくなります。
この理由は、プロセスがUNIXのようなカーネルで実行される方法にあります。カーネルがプロセスを実行することを決定するたびに、そのプロセスは一定の(固定された短い)期間CPUコアを完全に制御します。「適切な値」は、カーネルスケジューラがプロセスにタイムスロットを割り当てようとする頻度に影響を与える可能性がありますが、一度スケジュールされると、プロセスが一定時間影響を受けずに実行されるという事実を変更することはできません。
したがって、CPUの速度を落とす以外に、CPUアクセスを争うシステムに他のプロセスがない場合、プロセスの実行を遅くする方法はありません。