Есть ли способ сказать, был ли сценарий оболочки убит сигналом 9

У меня есть сценарий bash (вызванный из java-программы), который продолжает убивать. Я всегда поймаю signal 15 trap но затем появляется другой сигнал, который, как я подозреваю, является signal 9 но я в основном ослеп, если это действительно signal 9 .

Я знаю, что вы не можете trap signal 9 , так есть ли другой способ, который я могу сказать, если signal 9 убивает мой сценарий оболочки?

  • Как использовать 'в псевдониме?
  • BASH- Найти владельца файла
  • Поиск файлов в каталоге с парными именами
  • Удалить папки, которые не соответствуют списку
  • Как я могу автоматически вводить пароль из .bash_profile при запуске команды в качестве sudo?
  • Unix - как извлекать файлы на основе части имени файла, которая является датой
  • Аргумент командной строки сценария Bash для верхнего регистра
  • Получение идентификатора родительского / дочернего процесса из определенного идентификатора процесса
  • One Solution collect form web for “Есть ли способ сказать, был ли сценарий оболочки убит сигналом 9”

    Статус выхода убитой команды должен быть номером сигнала плюс 128. Таким образом, вы можете использовать статус выхода, чтобы узнать, какой сигнал вы убили.

    Я протестировал его так на Linux в оболочке:

     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: Обратите внимание, что программа может решить выйти с любым значением¹ (так что вам нужно решить, насколько вы доверяете статусу выхода как эффект сигнала):

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

    Сноска 1: В моих системах коды выхода представлены как 8-битные числа без знака, поэтому они обертываются при 256 = 0.

    Linux и Unix - лучшая ОС в мире.