Сигналы bash

Когда bash находится в интерактивном режиме, при отсутствии каких-либо обработчиков сигналов, она игнорирует сигнал SIGTERM (так что kill 0 не уничтожает интерактивную оболочку), а SIGINT перехватывается и обрабатывается (так что встроенная команда wait не прерывается). В любом случае bash игнорирует SIGQUIT. Если работает управление заданиями, bash игнорирует SIGTTIN, SIGTTOU и SIGTSTP.

Помимо запущенных встроенных команд bash имеют установленные значения обработчиков сигналов наследуемые из родительского процесса. Когда управление заданиями не действует, асинхронные команды игнорируют также SIGINT и SIGQUIT. Когда выполняются команды для подстановки команд, игнорируются сигналы управления заданиями SIGTTIN, SIGTTOU и SIGTSTP введённые с клавиатуры.

Командная оболочка по умолчанию завершает работу при получении сигнала SIGHUP. Перед выходом интерактивная оболочка посылает сигнал SIGHUP всем заданиям, работающим или остановленным. Остановленным работам направляется сигнал SIGCONT для подтверждения того что они получили SIGHUP. Чтобы избежать отправки сигнала определённому заданию, оно должно быть удалено из таблицы заданий при помощи встроенной команды disown (встроенные команды будут описываться в дальнейшем) или же отметить задание чтобы не получать SIGHUP используя disown -h.

Если опция huponexit оболочки установлена при помощи команды shopt, bash посылает SIGHUP всем заданиям при выходе из командного интерпретатора.

Если bash ожидает завершения команды и получает сигнал для которого установлен обработчик, обработчик не будет выполнен, пока команда не завершится. Когда bash ожидает асинхронную команду с помощью встроенной команды wait, получение сигнала для которого установлен обработчик, приводит к завершению встроенной команды wait со статусом выхода больше 128, сразу после чего обработчик выполняется.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *