¿Hay alguna forma de saber si un script de shell se eliminó con la señal 9?

¿Hay alguna forma de saber si un script de shell se eliminó con la señal 9?

Tengo un script bash (llamado desde un programa java) que sigue muriendo. Siempre capto el signal 15with trappero luego aparece alguna otra señal que sospecho que es, signal 9pero estoy básicamente ciego en cuanto a si realmente lo es signal 9.

Sé que no puedes trap signal 9, entonces, ¿hay alguna otra manera de saber si signal 9está matando mi script de shell?

Respuesta1

El estado de salida de un comando cancelado debe ser el número de señal más 128. Por lo tanto, puede usar el estado de salida para averiguar qué señal canceló su proceso.

Lo probé así en Linux en el 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

EDITAR: Tenga en cuenta que un programa puede decidir salir con cualquier¹ valor (por lo que debe decidir hasta qué punto confía en que el estado de salida sea el efecto de una señal):

for i in $(seq 256); do
  sh -c "exit $i"
  echo Program exited with $?
done

Nota al pie 1: En mis sistemas, los códigos de salida se representan como números de 8 bits sin signo, por lo que se ajustan a 256=0.

información relacionada