Я запутался в передаче сигналов дочерним процессам с помощью ловушек. Скажем, у меня есть два сценария:bash trap '' vs функция передачи функции ловушки
A.Sh
#!/bin/bash
# print the process id
echo $$
cleanup() {
rv=$?
echo "cleaning up $rv"
exit
}
sleep 5
trap '' SIGTERM # trap cleanup SIGTERM
echo 'cant stop wont stop'
./b.sh
echo 'can stop will stop'
trap - SIGTERM
sleep 4
echo 'done'
b.sh
#!/bin/bash
sleep 4;
echo 'b done'
Если я исполняю a.sh
, а затем из другого окна убить группу процессов с kill -- -PGID
, то SIGTERM игнорируется и не передается по адресу b.sh
. Но если я делаю trap cleanup SIGTERM
, SIGTERM проходит и заканчивает b.sh
. Почему моя ловушка передает сигнал в одном случае, а не в другом?