у меня есть вызов run.sh
Баш скрипт, который запускает несколько процессовОтправка SIGTERM всем процессам
#!/bin/bash
proc1 &
proc2 &
proc3 &
final # this runs until sigterm
Когда я исполняю run.sh
и я отправить SIGTERM в run.sh, я не думаю, что SIGTERM посылается в final
, и я не думаю, что он отправляется в proc1
, proc2
и proc3
. Обратите внимание, что в этом случае это контейнер для докеров, который работает run.sh
, а работа docker stop
- это способ, которым я пытаюсь отправить SIGTERM.
Что было бы самым простым способом для скрипта bash отправить сигмерм всем процессам, которые он начал? Единственный способ, о котором я могу думать, - это запустить final
с &
, а затем сделать цикл while в run.sh
?
EDIT - я пробовал, хотя, кажется, не работает: В run.sh
#!/bin/bash
_term() {
echo "Caught SIGTERM signal!"
}
trap _term SIGTERM
echo "hi"
sleep 100000 &
wait $!
При работе Docker стоп, я никогда не видел Caught SIGTERM signal!
Вам необходимо пройти вниз '_term' имя функции в виде строки, как:' ловушки «» _term SIGINT' – h3nrik
@ h3nrik Я попытался «_term», до сих пор не работает – K2xL
Ваш скрипт не может запустить обработчик до тех пор, пока «sleep» не выйдет, поскольку он не прерывается.Запустите его в фоновом режиме с помощью 'sleep 100000 &'; то выполняется команда 'wait' и * * может быть прервана для запуска вашего помощника. Кстати, '$!' Не совсем определен в вашем скрипте, потому что вы еще не запускали никаких фоновых команд. – chepner