Man kann nicht wirklich einen Prozess dazu bringen, weniger zu laufen . Sie können es verwenden nice
, um eine niedrigere Priorität zuzuweisen, dies steht jedoch im Verhältnis zu anderen Prozessen. Die Möglichkeit, den CPU-Kühler während usleep(3)
der Ausführung eines Prozesses zu betreiben, besteht darin , den Prozess für eine bestimmte Zeit aus dem Ausführungsstatus zu zwingen. Dies würde jedoch entweder das Patchen tar
oder die Verwendung des LD_PRELOAD
Mechanismus zur Bereitstellung einer gepatchten Funktion erfordern, die viel Zeit in Anspruch nimmt tar
(z. B. fopen(3)
).
Ich vermute, dass Ihre beste Lösung die Hardware ist, die Sie bei SuperUser erwähnt haben: Halten Sie den Laptop kühl und / oder senken Sie den CPU-Takt.
Eine ärgerliche, aber möglicherweise praktikable Problemumgehung (ein Trick, wirklich) funktioniert auf einer "makroskopischen" Ebene. Anstatt tar
100 ms alle 200 ms laufen zu lassen, können Sie aus zwei eine Sekunde machen. Hinweis: Dies ist ein schrecklicher, schrecklicher Kludge. Aber hey, es könnte sogar funktionieren!
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
Die erste sleep
passt die Ruhezeit an, die zweite die Laufzeit. So wie es jetzt ist, hat es ein Tastverhältnis von 50%. Um die Temperatur niedrig zu halten, müssen Sie den Arbeitszyklus wahrscheinlich auf 25% oder weniger reduzieren (1 Sekunde, 3 Sekunden Schlaf = 1 von 4 Sekunden = 25% Arbeitszyklus). Der Shell-Befehl sleep
kann übrigens Bruchzeiten annehmen. So könnte man sogar sagen sleep 0.1
. Behalten Sie den Wert über 0,001, um sicherzugehen, und vergessen Sie nicht, dass die Skriptausführung die Zeit verlängert.