Прерывание выполнения скрипта по Ctrl+C работает, а с kill -SIGINT - нет. Почему?
Привет, ЛОР.
Я написал скрипт, который имеет обработку прерывания по Ctrl+C вот таким образом:
# SigINT handling to cleaunp on "Crtl + C" command
trap 'killall stunnel && rm -f /tmp/sslconn.log && exit 0' INT
То есть, убивает все тоннели stunnel и удаляет файл временных логов sslconn.log.
Если я нажимаю Ctrl+C в консоли, где работает скрипт в режиме foreground, то trap отрабатывает как надо, туннели убиваются, файл удаляется.
А вот есть я из другой консоли отправляю команду kill с нужным PID-ом:
kill -SIGINT $pid
Что я делаю не так? Как мне прекращать работу скрипта с помощью команды?
Мне нужно это для того, чтобы останавливать работу скрипта, когда его останавливает мой сервис по команде
service mytunnel stop
start() {
/etc/mytunnel/mytunnel.sh &
pid=$!
echo $pid > /tmp/run/mytunnel.pid
}
stop() {
if [ -f "/tmp/run/mytunnel.pid" ]; then
pid=$(cat /tmp/run/mytunnel.pid)
kill -SIGINT $pid
fi
}
UPD. Заметил такую особенность. Если пробовать завершить процесс mytunnel.sh с помощью команды kill -SIGTERM, ничего не происходит. Но, если с помощью этой же команды завершить chils-процесс «sleep», то mytunnel.sh обрабатывает SIGTERM и выходит корректно.
Получается, что sleep как-то блокирует trap?