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

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