El estado de salida de un comando eliminado debe ser el número de señal más 128. Por lo tanto, puede usar el estado de salida para averiguar qué señal eliminó su proceso.
Lo probé así en Linux en el shell:
print_exit_status_for_signal () {
(
sleep 1000
echo Exit staus $? = signal $(( $? - 128 ))
) &
sleep 1
killall "${1:+-$1}" sleep
}
print_exit_status_for_signal
print_exit_status_for_signal 15
print_exit_status_for_signal 9
print_exit_status_for_signal KILL
print_exit_status_for_signal TERM
EDITAR: tenga en cuenta que un programa puede decidir salir con cualquier valor¹ (por lo que debe decidir hasta qué punto confía en que el estado de salida sea el efecto de una señal):
for i in $(seq 256); do
sh -c "exit $i"
echo Program exited with $?
done
Nota 1: en mis sistemas, los códigos de salida se representan como números de 8 bits sin signo, por lo que se ajustan a 256 = 0.
status
proceso del niño a través dewait(2)
o algo.