У меня есть такой сценарий:
#!/bin/bash
set -e
#WHAT SHOULD I WRITE HERE?
sleep 60 # this is for testing
#java ... | logger # this is what will be in the real script
Я хочу иметь возможность убить myscript и все его подпроцессы, отправив myscript SIGTERM:
$ kill -s SIGTERM 5929
Когда я запускаю его, я вижу ps fuxa
:
me 3640 0.0 0.1 108416 2100 pts/2 Ss 09:38 0:00 \_ /bin/bash
me 5929 0.0 0.0 106060 1348 pts/2 S+ 11:21 0:00 \_ /bin/bash myscript
me 5930 0.0 0.0 100908 604 pts/2 S+ 11:21 0:00 \_ sleep 60
Я пробовал множество строк ловушек из разных ответов, которые я нашел:
#trap 'echo hello' SIGHUP SIGINT SIGTERM EXIT
#trap 'kill $(jobs -p)' SIGHUP SIGINT SIGTERM EXIT
#trap "trap - SIGTERM && kill -- -$$" SIGHUP SIGINT SIGTERM EXIT
Я использовал 1-й для отладки. Я испытываю то, что отправляю SIGTERM (или даже больше одного), и ничего не происходит. Когда я нажимаю Ctrl+C
, myscript останавливается и пишет "привет" несколько раз. Таким образом, это подтверждает меня, что я отправляю сигнал TERM правильно и он получен, но все же я не достиг своей цели: немедленно остановить myscript. Я получил такие же результаты с двумя другими линиями ловушки.