Existe alguma maneira de saber se um script de shell foi eliminado com o sinal 9

Existe alguma maneira de saber se um script de shell foi eliminado com o sinal 9

Eu tenho um script bash (chamado de um programa java) que continua sendo morto. Eu sempre pego o signal 15with trap, mas então aparece algum outro sinal que eu suspeito que seja, signal 9mas estou basicamente cego para saber se é realmente signal 9.

Eu sei que você não pode trap signal 9, então há alguma outra maneira de saber se signal 9está matando meu script de shell?

Responder1

O status de saída de um comando eliminado deve ser o número do sinal mais 128. Portanto, você pode usar o status de saída para descobrir qual sinal eliminado você está processando.

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¹ (portanto, você deve decidir até que ponto 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: Em meus sistemas, os códigos de saída são representados como números não assinados de 8 bits, portanto, são agrupados em 256 = 0.

informação relacionada