Supongamos que ejecuto un comando en una sesión de shell, por ejemplo bash -c 'apt-get update && apt-get upgrade'
. 5 minutos después, decido salir a tomar un refrigerio y me doy cuenta de que olvidé agregar algún tipo de mecanismo de notificación para saber si la salida fue exitosa o no.
Bueno, que hago ahora? Si solo pudiera consultar desde otro terminal el estado de salida de ese otro comando (o específicamente, ese PID), tal vez podría después de todo mostrar algún tipo de ventana emergente. Entonces la pregunta es: ¿cómo puedo consultar el estado de salida de un proceso que ya se está ejecutando desde otro terminal?
En otras palabras,
DADO que tengo un proceso en ejecución en la terminal A Y se conoce su PID
CUANDO ejecuto algún comando en la terminal B
ENTONCES debería poder saber si el proceso en la terminal A finaliza con el estado de salida 0 o el estado de salida> 1.
fuente
wait
para obtener el código de un proceso en segundo plano en su shell actual, después de que finalice, pero no pude encontrar nada que permitiera consultar otros shells. Simplemente monitorear si un proceso aún se está ejecutando y generar una alerta una vez que sale también es trivial nuevamente, pero no descubrir su código de salida. La única forma en que podría pensar sería en preparar su shellPROMPT_COMMAND
para almacenar el último código de salida en un archivo temporal o ubicación accesible similar. ¿Sería esa una opción?Respuestas:
Use de la
strace
siguiente manera:Aquí no interesan ni las llamadas ni las señales del sistema, por lo que decimos
strace
ignorarlas con las-e
expresiones y suprimir un mensaje de estado con-q
.strace
se conecta al proceso con PID$PID
, espera a que salga normalmente y muestra su estado de salida de esta manera:Una
if
expresión simple para llamar a cualquier tipo de notificación podría ser:Ejecución de ejemplo
La mayor parte del crédito se destina a esta respuesta en U&L , deje un voto positivo allí si lo encuentra útil.
fuente