O status de saída de um comando morto deve ser o número do sinal mais 128. Portanto, você pode usar o status de saída para descobrir qual sinal morto você processa.
Eu testei assim 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: Observe que um programa pode decidir sair com qualquer valor¹ (então você precisa decidir até que ponto você confia no status de saída como 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 não assinados, e são agrupados em 256 = 0.
status
processo filho viawait(2)
ou algo assim.