• каким образом процесс отвечает на сигнал по умолчанию, а также средства, с помощью которых процессы могут изменять свой ответ на сигнал, в частности, за счет использования обработчика сигнала — программно-определенной функции, активируемой автоматически в случае получения сигнала;
• использование сигнальной маски процесса для блокировки сигналов, а также связанного с ней понятия ожидающих сигналов;
• как процесс может приостановить выполнение и подождать доставки сигнала.
Один процесс может (при наличии необходимых разрешений) отправить сигнал другому процессу. При таком использовании сигналы могут рассматриваться как технология синхронизации либо даже как примитивная форма межпроцессного взаимодействия (IPC). Процесс также может отправить сигнал самому себе. Однако обычно источником большинства сигналов, отправляемых в процесс, является ядро. Далее перечислены несколько типов событий, свершение которых заставляет ядро сгенерировать сигнал для процесса.
• Произошло аппаратное исключение. Это значит, что аппаратное обеспечение зафиксировало неверное состояние и оповестило об этом ядро, которое, в свою очередь, направило соответствующий сигнал затронутому процессу. Примерами аппаратного исключения могут быть выполнение ошибочного машинного кода, деление на ноль, а также обращение к недоступному участку памяти.
• Пользователь ввел один из специальных символов терминала, генерирующих сигналы. Примерами таких символов могут быть символ
• Произошло программное событие. Например, появился ввод из файлового дескриптора, размер окна терминала был изменен, сработал таймер, для процесса было превышено временное ограничение ЦП либо был завершен дочерний процесс данного процесса.
Каждому сигналу присваивается уникальный идентификатор — (небольшое) целое число, нумерация задается последовательно по возрастанию, начиная с 1. Эти целые числа определены в файле
Сигналы можно разделить на две большие категории. Первый набор сигналов состоит из
Говорят, что сигнал
Как правило, сигнал в режиме ожидания доставляется в процесс при его следующем запланированном выполнении либо моментально, если процесс уже запущен (например, если процесс отправил сигнал самому себе). Но иногда мы должны быть уверены в том, что выполнение фрагмента кода не будет прервано доставкой сигнала. Для этого мы можем добавить сигнал в
• Сигнал
Процесс