script1.sh:
#!/bin/bash
./script2.sh
echo after-script
script2.sh:
#!/bin/bash
function handler {
exit 130
}
trap handler SIGINT
while true; do true; done
Когда я запускаю script1.sh из терминала, а затем использую Ctrl + C для отправки SIGINT в свою группу процессов, сигнал захватывается скриптом2.sh, и когда script2.sh завершается, script1.sh печатает "after- script". Тем не менее, я бы ожидал, что script1.sh немедленно завершится после строки, которая вызывает script2.sh. Почему это не так в этом примере?
Дополнительные примечания (править):
-
Поскольку сценарии1.sh и script2.sh находятся в одной группе процессов, SIGINT отправляется в оба сценария, когда в командной строке нажата комбинация клавиш Ctrl + C. Вот почему я не ожидал, что script1.sh продолжит работу при выводе script2.sh.
-
Когда строка "обработчик ловушки SIGINT" в скрипте2.sh закомментирована, script1.sh завершает работу сразу после того, как script2.sh существует. Я хочу знать, почему он ведет себя по-другому, поскольку script2.sh создает только тот же код выхода (130).