Quando executo um comando ( make
em um projeto grande) a partir do shell, posso digitar Ctrl-Z para interromper o processo e retornar ao shell. Posteriormente, posso executar fg
para continuar o processo.
Estou tentando escrever um script de shell para automatizar isso (especificamente, para verificar a temperatura da CPU a cada poucos segundos e interromper o processo se estiver muito quente, pois meu computador está sujeito a superaquecimento). Minha primeira tentativa funcionou assim (simplificada):
make &
subpid="$!"
sleep 2
# If the CPU temperature is too high...
kill -STOP "$subpid"
sleep 2
# If the CPU temperature has dropped to safe levels...
kill -CONT "$subpid"
wait "$subpid"
Infelizmente, isso não funcionou; o envio do SIGSTOP para o processo não o interrompeu (como ficou evidente pelo fato de ele continuar enviando saída para o terminal). Corri make &
na linha de comando, enviei o SIGSTOP e verifiquei o status do processo com ps
; foi listado como parado (e iniciado novamente quando enviei o SIGCONT), mas ainda estava vomitando a saída e aumentando minha temperatura central! Parar com Ctrl-Z nunca teve esse problema, mas não sei como fazer isso em um script.
O que diferencia o Ctrl-Z kill -STOP
e como posso obter o comportamento do primeiro em um script de shell?
make
está sendo executado recursivamente. Na verdade, acho que vai vários níveis de profundidade.