[EDIT] Я изменил SIGINT на SIGTERM в целом вопрос.
У меня есть скрипт, который запускает скрипт подпроцесса, который запускает jboss.
#!/bin/sh
....
start_jboss.sh &
trap 'kill -SIGTERM 0' EXIT HUP TERM INT
....
Я хочу отправить сигнал SIGTERM в jboss, когда мой скрипт был убит, прерван или прерван. Но приведенный выше код не заканчивается JBoss. Сигнал KILL
убивает JBoss (следующий код), но JBoss не снимает блокировку базы данных H2. В моем случае важно снять блокировку H2, поэтому я должен использовать сигнал SIGTERM.
#!/bin/sh
....
start_jboss.sh &
trap 'kill -9 0' EXIT HUP TERM INT
....
Мой JBoss использует порт 8080, поэтому следующая команда дает мне pid JBoss:
sudo netstat -lnpt | grep 8080
Если я выполню следующую команду:
kill -SIGTERM jboss_pid_from_netstat_command
затем JBoss прерывается и снимает блокировку базы данных H2.
Как изменить мое действие ловушки, чтобы отправить SIGTERM
в JBoss? Я не знаю, почему SIGKILL работает, а SIGTERM не работает.
[EDIT] Я изменил SIGINT на SIGTERM в целом вопрос.
РЕДАКТИРОВАТЬ
Сценарий запуска JBoss (standalone.sh
) запускает JBoss в процессе переднего плана, если LAUNCH_JBOSS_IN_BACKGROUND
не установлен, и запускает JBoss в фоновом процессе, если установлена эта переменная. Поэтому я установил эту переменную в своем скрипте. Следующие сценарии работают правильно тогда:
#!/bin/sh
....
export LAUNCH_JBOSS_IN_BACKGORUND=a
standalone.sh &
trap 'kill -SIGTERM 0' EXIT HUP TERM INT
....
#!/bin/sh
....
export LAUNCH_JBOSS_IN_BACKGORUND=a
standalone.sh &
trap 'kill -SIGTERM $(jobs -pr)' EXIT HUP TERM INT
....
#!/bin/sh
....
export LAUNCH_JBOSS_IN_BACKGORUND=a
standalone.sh &
jboss_script_id=$!
trap 'kill -SIGTERM $jboss_script_id' EXIT HUP TERM INT
....
Я до сих пор не знаю, почему следующий код не работает. Я работаю на Centos с Bash. Я проверил его на Ubuntu с дефисом, и следующие коды работают, но выдается предупреждение о core dump
.
(не работа)
#!/bin/sh
....
standalone.sh &
trap 'kill -SIGTERM 0' EXIT HUP TERM INT
....
или (не работает)
#!/bin/sh
....
standalone.sh &
trap 'kill -SIGTERM $(jobs -pr)' EXIT HUP TERM INT
....
или (не работает)
#!/bin/sh
....
standalone.sh &
jboss_script_id=$!
trap 'kill -SIGTERM $jboss_script_id' EXIT HUP TERM INT
....