実際に実行するプロセスを減らすことはできません。nice
より低い優先度を与えるために使用できますが、それは他のプロセスに関連しています。プロセスの実行中にCPUクーラーを実行する方法はusleep(3)
、特定の時間だけプロセスを実行状態から強制的に解除することですが、それにはパッチを適用するtar
か、LD_PRELOAD
的に解除することですtar
が、それにはパッチを適用する多くを使用するパッチ機能を提供するメカニズムを(例:fopen(3)
)。
あなたの最善の回避策は、SuperUserであなたが言及したハードウェアであると思われます:ラップトップをクールに保ち、CPUクロックを下げる。
迷惑ではあるが実行可能な可能性のある回避策(実際には手抜き)は、「巨視的」レベルで機能します。tar
200msごとに100ms実行するのではなく、2回ごとに1秒実行するようにできます。注:これは恐ろしい、恐ろしいクラッジです。しかし、ちょっと、それはうまくいくかもしれません!
tar cjf some-file.tar.bz2 /some-directory &
while true; do
sleep 1 # Let it run for a second
kill -STOP $! 2>/dev/null || break
sleep 1 # Pause it for a second
kill -CONT $! 2>/dev/null || break
done
最初はsleep
スリープ時間を調整し、2番目はランタイムを調整します。現在のところ、50%のデューティサイクルになっています。温度を下げるには、デューティサイクルをおそらく25%以下に下げる必要があります(1秒実行、3秒スリープ= 4秒ごとに1 = 25%デューティサイクル)。sleep
ちなみに、シェルコマンドは、わずかな時間しかかかりません。だからあなたも言うことができますsleep 0.1
。念のため0.001を超えないようにしてください。また、スクリプトの実行が時間を増やすことを忘れないでください。