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

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

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

  • Как подавить код завершения готовых фоновых заданий
  • сравнение регулярных выражений и подстроки
  • Как создать чистую среду оболочки для временного использования?
  • Периодически перезапускать службу systemd
  • Системное событие на вставке адаптера переменного тока или батарее отключено?
  • Список файлов, созданных по воскресеньям
  • Использование команд оболочки для манипулирования файловыми путями для использования в качестве аргументов для другой программы
  • Как проверить возможные конфликты при использовании псевдонимов в bashrc?
  • Список файлов в иерархии каталога
  • Запуск qsub на кластере через ssh
  • Как получить свой собственный IP-адрес и сохранить его в переменной в сценарии оболочки?
  • bash: выполнить команду в фоновом режиме и захватить pid
  • 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 - лучшая ОС в мире.