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

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

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

  • перенаправить вывод tee и grep для нескольких лог-файлов
  • Объяснение вывода скрипта
  • Разбор C-стиля Многострочный комментарий
  • Point и нажмите Ubuntu 16.04 bash-скрипт случайным образом изменяет поведение вывода
  • передать значение переменной из сценария в другой скрипт с другого сервера
  • Рассчитать количество дней оплаты
  • Интерпретировать интерполированную переменную как литеральную строку в регулярном выражении Perl
  • Ssh на несколько серверов и объединить файлы в один
  • 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 - лучшая ОС в мире.