bash ловушка передана в команду с пользовательским обработчиком сигнала - PullRequest
0 голосов
/ 10 февраля 2020

В моем скрипте я перехватываю сигналы обычным способом.

function on_stop {
  echo 'On Stop'
  sleep 10
  echo 'Signalling others to exit'
  trap - TERM EXIT INT
  kill -s INT "$$"
}

./executable_with_custom_signal_handling &
pid=$!
trap 'on_stop' TERM EXIT INT
wait

Если вместо ./executable_with_custom_signal_handling используется sleep, все работает как положено. В противном случае ./executable_with_custom_signal_handling получает сигнал сразу параллельно с on_stop.

Мне интересно, это как-то связано с пользовательской обработкой сигнала в исполняемом файле?

signal(SIGINT, handler)

Есть ли обходные пути известно?

1 Ответ

0 голосов
/ 10 февраля 2020

По умолчанию оболочка запускает фоновые команды с SIGINT (и SIGQUIT) игнорируется .

Ваш фон sleep не прерывается Ctrl- C SIGINT для группы процессов, тогда, потому что он никогда не видит сигнал. Когда ваш пользовательский исполняемый файл устанавливает новое сигнальное действие, заменяя SIG_IGN, этот исполняемый файл будет получать SIGINT.

...