Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Причины возникновения сигналов






Сигналы. Посылка сигнала процессу из командной строки и программным путем. Критические секции.

Сигнал - это программное средство, с помощью которого может быть прервано функционирование процесса ОС UNIX. Сигналы сообщают процессам о возникновении асинхронных событий. Механизм сигналов позволяет процессам реагировать на различные события, которые могут происходить в ходе работы процесса внутри него самого или во внешней среде.

Сигналы описаны в файле < signal.h>, каждому из них ставится в соответствие мнемоническое обозначение. Количество и семантика сигналов зависят от версии ОС UNIX. Например, в версии System V сигналы имеют номера от 1 до 19:

#define NSIG    
#define SIGHUP   /* разрыв связи */
#define SIGINT   /* прерывание */
#define SIGQUIT   /* аварийный выход */
#define SIGILL   /* неверная машинная инструкция */
#define SIGTRAP   /* прерывание-ловушка */
#define SIGIOT   /* прерывание ввода-вывода */
#define SIGEMT   /* программное прерывание EMT */
#define SIGFPE   /* авария при выполнении операции с */
    /* плавающей точкой */
#define SIGKILL   /* уничтожение процесса */
#define SIGBUS   /* ошибка шины */
#define SIGSEGV   /* нарушение сегментации */
#define SIGSYS   /* ошибка выполнения системного вызова */
#define SIGPIPE   /* запись в канал есть, чтения нет */
#define SIGALRM   /* прерывание от таймера */
#define SIGTERM   /* программ. сигнал завершения от kill */
#define SIGUSR1   /* определяется пользователем */
#define SIGUSR2   /* определяется пользователем */
#define SIGCLD   /* процесс-потомок завершился */
#define SIGPWR   /* авария питания */

 

 

#define SIG_DFL (int(*)())0 /* все установки «по умолчанию» */
#define SIG_IGN (int(*)())1 /* игнорировать этот сигнал */

 

Примечание: причины возникновения сигналов для различных версий могут отличаться; первоначально они были обусловлены архитектурными особенностями ЭВМ PDP-11.

Причины возникновения сигналов

В версии System V UNIX возникновение сигналов можно классифицировать следующим образом:

  • введение пользователем управляющего символа с терминала всем процессам, ассоциированным с данным терминалом (SIGINT, SIGQUIT, SIGHUP);
  • возникновение аварийной ситуации при функционировании пользовательского процесса (SIGILL, SIGTRAP, SIGFPE, SIGBUS, SIGSEGV, SIGSYS, SIGPIPE);
  • возникновение непредусмотренного или не поддающегося идентификации события (SIGTERM, SIGCLD, SIGPWR);
  • возникновение некоторого заранее описанного события (SIGALRM).

Посылка сигналов производится процессами - друг другу, с помощью функции kill, или ядром. Для каждого процесса определен бинарный вектор, длина которого равна количеству сигналов в системе. При получении процессом сигнала I соответствующий i-й разряд этого вектора становится равным 1. Каждому сигналу соответствует адрес функции, которая будет вызвана для обработки данного сигнала.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.