Показать меню

Сигнал (Unix)

15.12.2020
9

Сигнал в операционных системах семейства Unix — асинхронное уведомление процесса о каком-либо событии, один из основных способов взаимодействия между процессами. Когда сигнал послан процессу, операционная система прерывает выполнение процесса, при этом, если процесс установил собственный обработчик сигнала, операционная система запускает этот обработчик, передав ему информацию о сигнале, если процесс не установил обработчик, то выполняется обработчик по умолчанию.

Названия сигналов «SIG…» являются числовыми константами (макроопределениями Си) со значениями, определяемыми в заголовочном файле signal.h. Числовые значения сигналов могут меняться от системы к системе, хотя основная их часть имеет в разных системах одни и те же значения. Утилита kill позволяет задавать сигнал как числом, так и символьным обозначением.

Спецификация сигналов включена в стандарты POSIX.

Посылка сигналов

Сигналы посылаются:

  • из терминала, нажатием специальных клавиш или комбинаций (например, нажатие Ctrl-C генерирует SIGINT, Ctrl- SIGQUIT, а Ctrl-Z SIGTSTP);
  • ядром системы:
    • при возникновении аппаратных исключений (недопустимых инструкций, нарушениях при обращении в память, системных сбоях и т. п.);
    • ошибочных системных вызовах;
    • для информирования о событиях ввода-вывода;
  • одним процессом другому (или самому себе), с помощью системного вызова kill(), в том числе:
    • из shell, утилитой /bin/kill.

Сигналы не могут быть посланы завершившемуся процессу, находящемуся в состоянии «зомби».

Обработка сигналов

Обработчик по умолчанию для большинства сигналов завершает выполнение процесса. Для альтернативной обработки всех сигналов, за исключением SIGKILL и SIGSTOP, процесс может назначить свой обработчик или игнорировать их возникновение модификацией своей сигнальной маски. Единственное исключение — процесс с pid 1 (init), который имеет право игнорировать или обрабатывать любые сигналы, включая KILL и STOP.

Безопасность

Процесс (или пользователь из оболочки) с реальным UID, не равным 0 (UID суперпользователя), может посылать сигналы только процессам с тем же реальным UID.

Классификация сигналов

POSIX определяет 28 сигналов, которые можно классифицировать следующим образом:

Также есть сигналы не определённые в POSIX, но присутствующие на некоторых операционных системах.

  • SIGEMT
  • SIGINFO. Посылается процессу, когда запрос статуса (info) получен от управляющего терминала.
  • SIGPWR
  • SIGLOST
  • SIGWINCH
  • SIGSTKFLT
  • SIGUNUSED
  • SIGCLD

При обработке исключений и отладочных сигналов перед завершением процесс может записать в текущий каталог файл с дампом памяти процесса (англ. core image), используя который, отладчик может восстановить условия, при которых возникло данное исключение. Иногда (например, для программ, выполняемых от имени суперпользователя) дамп памяти не создаётся из соображений безопасности.

SA_SIGINFO

Обычно обработчик сигнала получает только один аргумент — номер сигнала (это позволяет использовать одну функцию-обработчик для нескольких сигналов). Если при задании обработчика сигнала (функцией sigaction()) указать опцию SA_SIGINFO, то в обработчик будут переданы ещё два аргумента:

  • указатель на структуру siginfo_t, включающую:
    • битовую маску дополнительных «кодов сигнала», определяющих причину его возникновения;
    • идентификатор процесса (PID), пославшего сигнал;
    • эффективный идентификатор пользователя (UID), от имени которого выполняется процесс (например, утилита kill), пославший сигнал;
    • адрес инструкции, в которой возникло исключение;
    • и т. п.
  • указатель на «машинный контекст» на момент возникновения сигнала (со «стеком сигнала» — дополнительными данными, которые помещаются в стек при вызове некоторых сигналов-исключений).
  • Большинство дополнительных кодов специфичны для каждого сигнала. Коды, общие для всех сигналов:

    Еще по этой теме:
    Lo05
    03:59, 13 декабрь
    Lo05
    Протокол Lo05 — квантовый криптографический протокол распределения ключей, созданный учёными Хои-Квоном Ло, Ксионфеном Ма и Кай Ченом. Причины создания протокола Протоколы квантового распределения
    Корреляционный фильтр
    04:20, 11 декабрь
    Корреляционный фильтр
    Корреляционный фильтр — радиоэлектронное устройство, используемое для обнаружения сигнала заданной формы среди шума. Структура корреляционного фильтра Корреляционный фильтр представляет собой
    Квадратурный зеркальный фильтр
    06:59, 10 декабрь
    Квадратурный зеркальный фильтр
    Квадратурный зеркальный фильтр ( англ. Quadrature Mirror Filter - QMF) – это фильтр, чья амплитудная характеристика представляет собой зеркальное отражение относительно
    Принцип сенсорной коррекции
    08:05, 09 декабрь
    Принцип сенсорной коррекции
    Принцип сенсорной коррекции был предложен советским психологом и физиологом Н. А. Бернштейном, который сделал вывод о том, что организация сложных движений состоит из множества простых компонентов.
    Сигнальное созвездие
    15:55, 05 декабрь
    Сигнальное созвездие
    Сигнальное созвездие (англ. constellation diagram) — представление всевозможных значений комплексной амплитуды манипулированных радиосигналов на комплексной плоскости. Описание Всевозможные
    Метод искусственных нейронных сетей (часть 1)
    14:34, 13 март
    Метод искусственных нейронных сетей (часть 1)
    Искусственные нейронные сети (ИНС) становятся обычным инструментом для моделирования сложных зависимостей «ввода - вывода» ввиду их способности подражать поведению комплексных систем. В основе ИНС
    Комментарии:
    Добавить комментарий
    Ваше Имя:
    Ваш E-Mail:
    • bowtiesmilelaughingblushsmileyrelaxedsmirk
      heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
      winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
      worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
      expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
      disappointedconfoundedfearfulcold_sweatperseverecrysob
      joyastonishedscreamtired_faceangryragetriumph
      sleepyyummasksunglassesdizzy_faceimpsmiling_imp
      neutral_faceno_mouthinnocent