Cuando ejecuto un comando ( make
en un proyecto grande) desde el shell, puedo escribir Ctrl-Z para detener el proceso y volver al shell. Posteriormente, puedo ejecutar fg
para continuar el proceso.
Estoy tratando de escribir un script de shell para automatizar esto (específicamente, para verificar la temperatura de mi CPU cada pocos segundos y detener el proceso si hace demasiado calor, ya que mi computadora es propensa a sobrecalentarse). Mi primer intento funcionó así (simplificado):
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"
Lamentablemente, esto no funcionó; el envío de SIGSTOP al proceso no lo detuvo (como lo demuestra su continuo envío de salida al terminal). Corrí make &
en la línea de comando, envié SIGSTOP y verifiqué el estado del proceso con ps
; estaba en la lista como detenido (y comenzó de nuevo cuando envié SIGCONT), ¡pero todavía estaba arrojando resultados y elevando mi temperatura central! Detenerlo con Ctrl-Z nunca tuvo este problema, pero no sé cómo hacerlo en un script.
¿Qué hace diferente a Ctrl-Z kill -STOP
y cómo puedo obtener el comportamiento del primero en un script de shell?
make
se está ejecutando recursivamente. De hecho, creo que va varios niveles de profundidad.