Tak naprawdę nie można uzyskać mniejszego procesu . Możesz użyć, nice
aby 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 tar
lub użycia LD_PRELOAD
mechanizmu w celu zapewnienia łatanej funkcji, która tar
czę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 tar
uruchamiać 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 sleep
dostosowuje 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 sleep
mó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.