Вы не можете заставить процесс работать меньше . Вы можете использовать niceего для более низкого приоритета, но это связано с другими процессами. Способ запуска процессорного кулера во время выполнения процесса состоит в том, usleep(3)чтобы вывести процесс из состояния запуска на определенное время, но это может включать либо исправление, tarлибо использование LD_PRELOADмеханизма для предоставления исправленной функции, которая tarиспользует много (например, fopen(3)).
Я подозреваю, что ваши лучшие обходные пути - это те аппаратные средства, которые вы упомянули в SuperUser: поддержание охлаждения ноутбука и / или снижение тактовой частоты процессора.
Раздражающий, но, возможно, жизнеспособный обходной путь (на самом деле клудж) работает на «макроскопическом» уровне. Вместо того, чтобы tarзапускать 100 мс каждые 200 мс, вы можете сделать так, чтобы он запускал одну секунду из каждых двух. Примечание: это ужасный, ужасный клудж. Но эй, это может даже сработать!
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регулирует время сна, вторая - время работы. В настоящее время он имеет 50% -ный рабочий цикл. Чтобы поддерживать температуру на низком уровне, вам, скорее всего, потребуется уменьшить рабочий цикл до 25% или ниже (1 секунда бега, 3 секунды сна = 1 из каждых 4 секунд = 25% рабочего цикла). sleepКстати, команда оболочки может занимать немного времени. Так что вы могли бы даже сказать sleep 0.1. Держите его более 0,001, чтобы быть уверенным, и не забывайте, что выполнение скрипта также увеличивает время.