Ловушка SIGINT в фоновом процессе - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь понять пример кода, описывающего обработку сигналов в bash.В примере 32-7 в http://tldp.org/LDP/abs/html/debugging.html, в комментариях автора указано, что он захватывает сигнал SIGINT, но ловушка предназначена для EXIT.

{
     trap "exit" SIGUSR1
     sleep $interval; sleep $interval
     while true; do
         ...
     done; } &         # Start a progress bar as a background process.

pid=$!
trap "echo !; kill -USR1 $pid; wait $pid"  EXIT        # To handle ^C.

Почему ловушка EXIT отправляет правильный сигнал (SIGUSR1) к процессу Backgroud на SIGINT (Ctl-C)?

Любая помощь приветствуется, объясняя, почему это работает.

Ответы [ 2 ]

1 голос
/ 05 января 2012

EXIT - это специальный обработчик в trap для bash, это не сигнал.Сигнал выхода отсутствует.Эта ловушка выполняется всякий раз, когда процессы bash завершаются.Итак, убедитесь, что если пользователь убивает процесс bash, SIGUSR1 отправляется в фоновый процесс, который также перехватывается, а затем выполняет «выход» для этого процесса.Это гарантирует, что если вы прекратите сеанс, фоновый процесс не будет существовать вечно, но также завершится (что, вероятно, и пытается объяснить комментарий).

edit: я неправильно прочитал этот вопрос вмой оригинальный ответ

0 голосов
/ 05 января 2012

Псевдосигнал EXIT подается как при нормальном выходе, так и при прерывании работы сценария.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...