Quando eseguo un comando ( make
su un grande progetto) dalla shell, posso digitare Ctrl-Z per interrompere il processo e tornare alla shell. Successivamente, posso eseguire fg
per continuare il processo.
Sto provando a scrivere uno script di shell per automatizzare questo (in particolare, per controllare la temperatura della mia CPU ogni pochi secondi e interrompere il processo se fa troppo caldo, poiché il mio computer è soggetto a surriscaldamento). Il mio primo tentativo ha funzionato in questo modo (semplificato):
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"
Sfortunatamente, questo non ha funzionato; l'invio di SIGSTOP al processo non lo ha messo in pausa (come reso evidente dal suo continuo invio dell'output al terminale). Ho eseguito make &
dalla riga di comando, inviato SIGSTOP e verificato lo stato del processo ps
; è stato elencato come interrotto (e ricominciato quando ho inviato SIGCONT), ma stava ancora vomitando uscita e aumentando la mia temperatura interna! Fermarlo con Ctrl-Z non ha mai avuto questo problema, ma non so come farlo in uno script.
Cosa differenzia Ctrl-Z da kill -STOP
e come posso ottenere il comportamento del primo in uno script di shell?
make
viene eseguito in modo ricorsivo. In effetti, penso che vada a diversi livelli di profondità.