Ви дійсно не можете змусити процес запускати менше . Ви можете використовувати його, 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, щоб бути впевненим, і не забувайте, що виконання сценарію також додає часу.