Você realmente não pode obter um processo para executar menos . Você pode usar nice
para dar uma prioridade mais baixa, mas isso é em relação a outros processos. A maneira de executar o cooler da CPU durante a execução de um processo é usleep(3)
forçar o processo para sair do estado de execução por um certo período de tempo, mas isso envolveria a aplicação de patchestar
ou o uso do LD_PRELOAD
mecanismo para fornecer uma função corrigidatar
usa muito (por exemplo, fopen(3)
)
Eu suspeito que suas melhores soluções alternativas são as de hardware que você mencionou no SuperUser: manter o laptop fresco e / ou diminuir o clock da CPU.
Uma solução alternativa irritante, mas possivelmente viável (um kludge, na verdade) funciona em um nível 'macroscópico'. Em vez de tar
executar 100ms a cada 200ms, você pode executar um segundo a cada dois. Nota: este é um argumento 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 suspensão, o segundo ajusta o tempo de execução. Tal como está agora, possui 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 de execução, 3 segundos de sono = 1 de cada 4 segundos = 25% de ciclo de trabalho). O comando shell sleep
pode levar 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 esqueça que a execução do script também aumenta o tempo.