Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Общая информация Сигналы

Сигналы

Система определяет набор сигналов, которые могут быть доставлены процессу. Сигналы в FreeBSD сделаны по образцу аппаратных прерываний. Процесс может указать подпрограмму уровня пользователя в качестве обработчика, которому должен быть доставлен сигнал. Когда генерируется сигнал, его дальнейшее распространение блокируется до тех пор, пока он не будет перехвачен обработчиком. Перехват сигнала включает сохранение контекста текущего процесса и построение нового контекста, в котором будет запущен обработчик. Затем сигнал доставляется обработчику, который может либо аварийно завершить процесс, либо вернуться в выполняющийся процесс (возможно, после установки значения глобальной переменной). Если обработчик возвращается, сигнал разблокируется и может быть сгенерирован (и перехвачен) снова.

В качестве альтернативы процесс может указать, что сигнал должен быть проигнорирован или что должно быть применено определенное ядром действие по умолчанию. Действием по умолчанию для определенных сигналов является завершение процесса. Это завершение может сопровождаться созданием файла дампа ядра, который содержит образ текущей памяти процесса для использования в отладке после завершения программы.

Некоторые сигналы не могут быть перехвачены или проигнорированы. К этим сигналам относятся SIGKILL, который завершает вышедшие из-под контроля процессы, и сигнал управления заданиями SIGSTOP.

Процесс может выбрать, чтобы сигналы доставлялись в специальный стек таким образом, чтобы были возможны сложные манипуляции стеком программы. Например, язык, поддерживающий сопрограммы, должен предоставить стек для каждой сопрограммы. Система времени выполнения языка может выделять эти стеки, разделяя один стек, предоставленный FreeBSD. Если ядро не поддерживает отдельный стек сигналов, пространство, выделенное для каждой сопрограммы, должно быть увеличено на размер, необходимый для перехвата сигнала.

У всех сигналов один и тот же приоритет. Если ожидают несколько сигналов одновременно, порядок, в котором сигналы доставляются процессу, зависит от реализации. Обработчики сигналов работают с сигналом, который явился причиной блокировки их вызова, но могут иметь место еще и другие сигналы. Предусмотрены такие механизмы, чтобы процессы могли защитить критические разделы кода от появления определенных сигналов.

Сейчас 71 гостей онлайн

Реклама на сайте: