Puede usar strace
, que rastrea las señales y las llamadas al sistema. Los siguientes comando espera hasta que se haga un programa, luego imprime su código de salida:
$ strace -e none -e exit_group -p $PID # process calls exit(1)
Process 23541 attached - interrupt to quit
exit_group(1) = ?
Process 23541 detached
$ strace -e none -e exit_group -p $PID # ^C at the keyboard
Process 22979 attached - interrupt to quit
--- SIGINT (Interrupt) @ 0 (0) ---
Process 22979 detached
$ strace -e none -e exit_group -p $PID # kill -9 $PID
Process 22983 attached - interrupt to quit
+++ killed by SIGKILL +++
Las señales de ^Z
, fg
y kill -USR1
se imprimen también. De cualquier manera, necesitará usar sed
si desea usar el código de salida en un script de shell.
Si eso es demasiado código de shell, puede usar un program I hacked together in C hace un tiempo. Utiliza ptrace()
para captar señales y códigos de salida de pids. (Tiene bordes ásperos y puede no funcionar en todas las situaciones.)
¡Espero que ayude!
Sí. Pero quería agregar que solo puede esperar el código de salida del pid si ese pid es uno de sus hijos. –
Ah, gracias @Apprentice Queue, no sabía eso. –
Esto solo funciona en el shell desde el cual se invocó el proceso original; no por un proceso arbitrario. –