<<
>>

Системный вызов signal(). Установка собственного обработчика сигнала

Одним из способов изменения поведения процесса при получении сигнала в операционной системе UNIX является использование системного вызова signal().

Описание системного низом

Системный вызов signal служит для изменения реакции процесса ив какой-либо сипел.

Хотя протспшоютемного вызова выглядит довольно пугаоще, ничего страшного в нем нет. Приведенное вьтеописаюю можно словесно изложить следующим образом:

функция signal, возвращаюищя указатель на функцию с одним параметром типа int, которая ничего не возвращает, и имеющая деа параметра: параметр sig типа int и параметр handler, служащий указателем на ничего не возвращающую функцию с одним параметром типа int.

Параметр sig - это номер сигнала, обработку которого предстоит изменить.

Параметр handler описывает новый способ обработки сигнала - это может быть указатель на пользовательскую функцию *- обработчик сигнала, специальное значение SIGJDFL или специальное значение S IG_IGN.

Специальное значение S IG.IGN используется для того, чтобы процесс игнорировал поступившие сигналы с номером sig, специальное значение SIG_DFL - для восстановления реакции процесса на этот сипел по умолчанию.

Возвращаемое значение

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

Этот системный вызов имеет два параметра: один из них задает номер сигнала, реакцию процесса на который требуется изменить, а второй определяет, как именно мы собираемся ее менять. Для первого варианта реакции процесса на сигнал (см.

раздел «Понятие сигнала. Способы возникновения сигналов и виды их обработки») — его игнорирования — применяется специальное значение этого параметра — 31С_ЮКГ. Например, если требуется игнорировать сигнал ЭГСШТ, начиная с некоторого места работы программы, в этом месте программы мы должны употребить конструкцию

Для второго варианта реакции процесса на сигнал — восстановления его обработки по умолчанию — применяется специальное значение этого параметра — зю_брь. Для третьего варианта реакции процесса на сигнал в качестве значения параметра подставляется указатель на пользовательскую функцию обработки сигнала, которая должна иметь прототип вида

Ниже приведен пример скелета конструкции для пользовательской обработки сигнала эюнир:

void *my„handler(int nsig) {

}

int main() {

(void)signal(SIGHUP, my„handler);

}

В качестве значения параметра в пользовательскую функцию обработки сигнала (в нашем скелете — параметр nsig) передается номер возникшего сигнала, так что одна и та же функция может быть использована для обработки нескольких сигналов.

<< | >>
Источник: В.Е. Карпов К.А. Коньков. Основы операционных систем. 2005

Еще по теме Системный вызов signal(). Установка собственного обработчика сигнала:

  1. СИГНАЛ
  2. I. 1. СИСТЕМНЫЙ ПОДХОД КАК ИНСТРУМЕНТ ДЛЯ ПОСТРОЕНИЯ СИСТЕМНЫХ ОПИСАНИЙ
  3. ПЕРЕИМЕНОВАНИЕ АКТУАЛЬНОГО СИГНАЛА
  4. I. СИСТЕМНЫЕ ОПИСАНИЯ - ГЛАВНЫЙ РЕЗУЛЬТАТ СИСТЕМНОГО ПОДХОДА В ПСИХОЛОГИИ
  5. Психология личности целостна, системна (принцип целостности, системности).
  6. ВЫЗОВ ВРАЧА
  7. СПТ откликается на вызов обстоятельств
  8. Быстрый вызов желаемого
  9. Бросьте себе вызов
  10. Самоубийство как вызов обществу