[<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
 Сигналы

Сигналы - это механизм связи между процессами или ядром и процессом.
Они сообщают процессу, что произошло определенное событие. Говорят,
что сигнал генерируется для процесса (или посылается процессу), когда
впервые возникает соответствующее событие. Тип сигнала показывает тип
возникшего события.
Сигналы могут генерироваться явным образом с использованием системных
вызовов kill(2) и sigsend(2). Системным вызовом alarm(2) можно
установить будильник, который через заданное время посылает процессу
сигнал. Кроме того, различные аппаратные события также могут быть
причиной сигналов. Например, попытка записать значение по
недопустимому адресу или деление с плавающей точкой на ноль приводят к
тому, что ядро генерирует сигнал. Аналогично, разрыв линии связи или
нажатие клавиши INTR (<DELETE> по умолчанию) на вашем терминале также
генерируют сигналы.
Процесс может задать определенные действия, выполняемые при получении
сигнала, которые называются реакцией на сигнал. Каждый сигнал имеет
реакцию по умолчанию, которая выполняется, если не было задано никаких
действий. Для большинства сигналов реакция по умолчанию - завершение
процесса. Кроме того, процесс может игнорировать сигнал или вызывать
при его возникновении функцию обработки. Когда реакция установлена,
она остается таковой, пока не будет явным образом установлена другая
реакция. Когда процесс вызывает exec(2), все сигналы, реакция на
которые установлена в адрес функции, сбрасываются в реакцию по
умолчанию. Каждый процесс имеет маску сигналов, которая определяет
множество сигналов, получение которых в данный момент заблокировано.
Маска сигналов процесса наследуется от его родителя.
Процесс может обнаружить только один ожидающий сигнал данного типа.
Если второй сигнал того же типа возникнет прежде, чем первый сигнал
будет обработан, то второй сигнал будет потерян.
Предупреждение: будьте осторожны, используя сигналы для синхронизации.
Сигнал обнаруживается процессом в дискретные моменты времени. Может
оказаться, что сигнал будет получен прежде, чем процесс будет готов
получить его.
Хотя говорят, что сигналы посылаются от процесса к процессу, на самом
деле они посылаются через ядро.
                               СИГНАЛЫ
.    могут быть посланы от одного процесса другому
.    могут быть посланы ядром
.    сообщение о внешнем событии
.    обрабатываются получающим процессом
реакция на сигналы:
    по умолчанию
    игнорирование
    вызов функции