Системный вызов 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) передается номер возникшего сигнала, так что одна и та же функция может быть использована для обработки нескольких сигналов.
Еще по теме Системный вызов signal(). Установка собственного обработчика сигнала:
- СИГНАЛ
- I. 1. СИСТЕМНЫЙ ПОДХОД КАК ИНСТРУМЕНТ ДЛЯ ПОСТРОЕНИЯ СИСТЕМНЫХ ОПИСАНИЙ
- ПЕРЕИМЕНОВАНИЕ АКТУАЛЬНОГО СИГНАЛА
- I. СИСТЕМНЫЕ ОПИСАНИЯ - ГЛАВНЫЙ РЕЗУЛЬТАТ СИСТЕМНОГО ПОДХОДА В ПСИХОЛОГИИ
- Психология личности целостна, системна (принцип целостности, системности).
- ВЫЗОВ ВРАЧА
- СПТ откликается на вызов обстоятельств
- Быстрый вызов желаемого
- Бросьте себе вызов
- Самоубийство как вызов обществу