Lorsque j'exécute une commande ( make
sur un grand projet) à partir du shell, je peux taper Ctrl-Z pour arrêter le processus et revenir au shell. Par la suite, je peux courir fg
pour continuer le processus.
J'essaie d'écrire un script shell pour automatiser cela (en particulier, pour vérifier la température de mon processeur toutes les quelques secondes et arrêter le processus s'il fait trop chaud, car mon ordinateur est sujet à une surchauffe). Ma première tentative a fonctionné comme ceci (simplifié):
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"
Malheureusement, cela n'a pas fonctionné; l'envoi de SIGSTOP au processus ne l'a pas interrompu (comme en témoigne le fait qu'il continue d'envoyer la sortie au terminal). J'ai couru make &
sur la ligne de commande, envoyé SIGSTOP et vérifié l'état du processus avec ps
; il a été répertorié comme arrêté (et a recommencé lorsque j'ai envoyé SIGCONT), mais il crachait toujours la sortie et augmentait ma température à cœur! L'arrêter avec Ctrl-Z n'a jamais eu ce problème, mais je ne sais pas comment faire cela dans un script.
Qu'est-ce qui différencie Ctrl-Z kill -STOP
et comment puis-je obtenir le comportement du premier dans un script shell?
make
est exécuté de manière récursive. En fait, je pense que cela va à plusieurs niveaux.