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


14

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

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


4
O que está executando o script de shell? Esse processo deve ter acesso ao statusprocesso filho via wait(2)ou algo assim.
— thrig

um programa java que está sendo executado como um daemon começou com arrivista está executando o processo shell script
— jgr208

1
Você poderia strace o programa e procure uma linha que diz "morto por SIGKILL" ou fazer algum trabalho auditd com-a entry,always -F arch=b64 -S kill -k kill_signals
— Bratchley

Respostas:


20

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.


1
Observe que isso é confiável apenas para o sinal 9, que não pode ser interceptado. Outros sinais podem ser capturados pelo programa, que pode sair com qualquer valor.
— GnP 20/05

sim, como GNP disse, o kill -9 não pode ser traped
— c4f4t0r

Você tem alguma fonte?
— Twifty
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.