Realmente no puede hacer que un proceso se ejecute menos . Puede usar nice
para darle una prioridad más baja, pero eso está en relación con otros procesos. La forma de ejecutar el enfriador de la CPU mientras se ejecuta un proceso es usar usleep(3)
para forzar el proceso fuera del estado de ejecución una cierta cantidad de tiempo, pero eso implicaría parchear tar
o usar el LD_PRELOAD
mecanismo para proporcionar una función parcheada que tar
usa mucho (p. Ej. fopen(3)
)
Sospecho que sus mejores soluciones son las de hardware que ha mencionado en SuperUser: mantener la computadora portátil fresca y / o bajar el reloj de la CPU.
Una solución molesta pero posiblemente viable (un error, realmente) funciona a un nivel 'macroscópico'. En lugar de hacer tar
correr 100 ms cada 200 ms, puede hacer que se ejecute un segundo de cada dos. Nota: este es un horrible, horrible kludge. Pero bueno, ¡incluso podría funcionar!
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
El primero sleep
ajusta el tiempo de sueño, el segundo ajusta el tiempo de ejecución. Tal como está ahora, tiene un ciclo de trabajo del 50%. Para mantener baja la temperatura, es probable que necesite reducir el ciclo de trabajo a quizás un 25% o menos (1 segundo de funcionamiento, 3 segundos de reposo = 1 de cada 4 segundos = 25% de ciclo de trabajo). El comando de shell sleep
puede tomar fracciones de tiempo, por cierto. Así que incluso podrías decir sleep 0.1
. Manténgalo por encima de 0.001 solo para estar seguro, y no olvide que la ejecución del script también aumenta el tiempo.