Você não consegue que um processo seja executado menos . Você pode usar nice
para dar uma prioridade menor, mas isso é em relação a outros processos. A maneira de executar o cooler do processador durante a execução de um processo é usar usleep(3)
para forçar o processo a sair do estado de execução por um determinado período de tempo, mas isso envolveria patch tar
ou o mecanismo LD_PRELOAD
para fornecer uma função corrigida que tar
usa muito (por exemplo, fopen(3)
).
Eu suspeito que suas melhores soluções sejam as que você mencionou no SuperUser: mantendo o laptop frio e / ou diminuindo o clock da CPU.
Uma solução chata, mas possivelmente viável (um kludge, na verdade) funciona em um nível "macroscópico". Em vez de fazer com que tar
execute 100 ms a cada 200 ms, você poderá fazer com que ele seja executado um segundo de cada dois. Nota: este é um kludge horrível e horrível. Mas ei, pode até 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
O primeiro sleep
ajusta o tempo de espera e o segundo ajusta o tempo de execução. Tal como está agora, tem um ciclo de trabalho de 50%. Para manter a temperatura baixa, você provavelmente precisará reduzir o ciclo de trabalho para talvez 25% ou menos (1 segundo, 3 segundos = 1 a cada 4 segundos = ciclo de trabalho de 25%). O comando shell sleep
pode pegar tempos fracionários, a propósito. Então você poderia até dizer sleep 0.1
. Mantenha-o acima de 0,001 apenas para ter certeza, e não se esqueça de que a execução do script também aumenta o tempo.