O status de saída de um comando morto deve ser o número do sinal mais 128. Assim, você pode usar o status de saída para descobrir qual sinal matou o processo.
Eu testei desse jeito no Linux no 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
EDIT: Note que um programa pode decidir sair com qualquer valor (assim você tem que decidir até que ponto você confia no status de saída para ser o efeito de um sinal):
for i in $(seq 256); do
sh -c "exit $i"
echo Program exited with $?
done
Nota de rodapé 1: Nos meus sistemas, os códigos de saída são representados como números de 8 bits sem sinal, de modo que eles envolvem 256 = 0.