Tak naprawdę nie można uzyskać mniejszego procesu . Możesz użyć, niceaby nadać mu niższy priorytet, ale dotyczy to innych procesów. Sposobem na uruchomienie procesora chłodzącego podczas działania procesu jest usleep(3)wymuszenie przez proces określonego czasu, ale wymagałoby to łatania tarlub użycia LD_PRELOADmechanizmu w celu zapewnienia łatanej funkcji, która tarczęsto wykorzystuje (np. fopen(3)).
Podejrzewam, że twoje najlepsze obejścia to sprzętowe, o których wspomniałeś w SuperUser: utrzymywanie chłodu laptopa i / lub obniżanie zegara procesora.
Irytujące, ale prawdopodobnie realne obejście (kludge, naprawdę) działa na poziomie „makroskopowym”. Zamiast taruruchamiać 100 ms co 200 ms, możesz sprawić, że będzie działać o jedną sekundę na każde dwa. Uwaga: to jest okropna, okropna kludge. Ale hej, to może nawet zadziałać!
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
Pierwszy sleepdostosowuje czas snu, drugi dostosowuje czas działania. W obecnej postaci ma 50% cyklu pracy. Aby utrzymać niską temperaturę, najprawdopodobniej będziesz musiał zmniejszyć cykl pracy do około 25% lub mniej (1 sekunda pracy, 3 sekundy snu = 1 na każde 4 sekundy = 25% cyklu pracy). Nawiasem sleepmówiąc, polecenie powłoki może zajmować ułamkowe czasy. Więc możesz nawet powiedzieć sleep 0.1. Dla pewności trzymaj go powyżej 0,001 i nie zapominaj, że wykonywanie skryptu również wydłuża czas.