Сигналы изначально были предложены,
как средство уведомления об ошибках,
но они могут быть использованы как простейшие
средства взаимодействия между процессами
(синхронизации процессов) или передачи команд
от одного процесса к другому.
Сигналы — одно из традиционных средств
межпроцессного взаимодействия в операционных системах.
Сигнал может быть отправлен процессу
операционной системой или другим процессом.
Операционная система использует сигналы для доставки
процессу уведомлений об ошибках
и неправильном поведении.
При получении сигнала исполнение процесса
приостанавливается и запускается специальная подпрограмма —
обработчик сигнала.
Обработчики сигналов могут быть явно определены
в исходном тексте исполняемой программы,
если же они отсутствуют, используется
стандартный обработчик, определенный операционной системой.
У сигнала есть только одна характеристика,
несущая информацию — его номер (целое число).
Иначе говоря, сигналы — это заранее определенный
и пронумерованный список сообщений.
Для удобства использования каждый сигнал
имеет сокращенное буквенное имя.
Список сигналов и их имен стандартизован
и практически не отличается в различных версиях ОС.
Сигналы являются ограниченным средством
межпроцесснного обмена. Они прекрасно подходят
для уведомлений, но не могут использоваться
для передачи информации между процессами.
Сигналы передаются без каких-либо сопутствующих данных,
поэтому они обычно комбинируются
с другими способами обмена.
Примеры вызовов POSIX-сигналов — signal(), kill().
Использование сигналов ограничено,
так как сигналы очень ресурсоемкие.
Отправка сигнала требует системного вызова,
а его доставка — прерывание процессов получателя.
Для отправки сигналов процессам используется
специальный системный вызов
и одноименная ему пользовательская утилита.
Стандарт POSIX определяет 28 сигналов.
Вот некоторые из примеров.
Второй сигнал передается активному приложению
при нажатии сочетания Ctrl + C,
по умолчанию завершает процесс.
Девятый сигнал — аварийного завершения процесса.
По этому сигналу процесс завершается немедленно,
без освобождения ресурсов.
Этот сигнал не может быть перехвачен,
заблокирован или переопределен самим процессом,
всегда используется стандартный обработчик
операционной системы. Чаще всего этот сигнал
используется для гарантированного завершения процесса.
Пятнадцатый сигнал — завершение процесса,
как правило используется для корректного завершения его работы.
Десятый и двенадцатый сигналы зарезервированы сигналы
под нужды программистов.
Использование сигналов по стандарту POSIX
осуществляется путем вызова функций,
генерирующих сигнал.
Для использования сигналов (WinApi) реализованы функции
WaitForMultipleObjects и ее частный случай
функция WaitForSingleObject.
Параметры этой функции представлены на картинке.
Функция SetEvent предназначена для установки событий.
Принимает один единственный параметр —
описатель события, который можно создать
функциями CreateEvent или OpenEvent.
Спасибо за внимание!