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

14

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

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

    
por jgr208 16.05.2016 / 18:57

1 resposta

20

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.

    
por 16.05.2016 / 20:20