Сигналы (UNIX)

Сигналы (UNIX)

Сигналы в UNIX, Unix-подобных и других POSIX-совместимых операционных системах являются одним из способов взаимодействия между процессами (англ. IPC, inter-process communication). Фактически, сигнал — это асинхронное уведомление процесса о каком-либо событии. Когда сигнал послан процессу, операционная система прерывает выполнение процесса. Если процесс установил собственный обработчик сигнала, операционная система запускает этот обработчик, передав ему информацию о сигнале. Если процесс не установил обработчик, то выполняется обработчик по умолчанию.

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

Содержание

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

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

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

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

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

Обработчик по умолчанию для большинства сигналов завершает выполнение процесса. Для альтернативной обработки всех сигналов, за исключением SIGKILL и SIGSTOP, процесс может назначить свой обработчик или игнорировать их возникновение модификацией своей сигнальной маски.

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

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

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

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

Название Действие по умолчанию Описание Тип
SIGABRT Завершение с дампом памяти Сигнал посылаемый функцией abort() Управление
SIGALRM Завершение Сигнал истечения времени, заданного alarm() Уведомление
SIGBUS Завершение с дампом памяти Неправильное обращение в физическую память Исключение
SIGCHLD Игнорируется Дочерний процесс завершен или остановлен Уведомление
SIGCONT Продолжить выполнение Продолжить выполнение ранее остановленного процесса Управление
SIGFPE Завершение с дампом памяти Ошибочная арифметическая операция Исключение
SIGHUP Завершение Закрытие терминала Уведомление
SIGILL Завершение с дампом памяти Недопустимая инструкция процессора Исключение
SIGINT Завершение Сигнал прерывания (Ctrl-C) с терминала Управление
SIGKILL завершение Безусловное завершение управление
SIGPIPE Завершение Запись в разорванное соединение (пайп, сокет) Уведомление
SIGQUIT Завершение с дампом памяти Сигнал «Quit» с терминала (Ctrl-\) Управление
SIGSEGV Завершение с дампом памяти Нарушение при обращении в память Исключение
SIGSTOP остановка процесса Остановка выполнения процесса управление
SIGTERM Завершение Сигнал завершения (сигнал по умолчанию для утилиты kill) Управление
SIGTSTP Остановка процесса Сигнал остановки с терминала (Ctrl-Z). Управление
SIGTTIN Остановка процесса Попытка чтения с терминала фоновым процессом Управление
SIGTTOU Остановка процесса Попытка записи на терминал фоновым процессом Управление
SIGUSR1 Завершение Пользовательский сигнал № 1 Пользовательский
SIGUSR2 Завершение Пользовательский сигнал № 2 Пользовательский
SIGPOLL Завершение Событие, отслеживаемое poll() Уведомление
SIGPROF Завершение Истечение таймера профилирования Отладка
SIGSYS Завершение с дампом памяти Неправильный системный вызов Исключение
SIGTRAP Завершение с дампом памяти Ловушка трассировки или брейкпоинт Отладка
SIGURG Игнорируется На сокете получены срочные данные Уведомление
SIGVTALRM Завершение Истечение «виртуального таймера» Уведомление
SIGXCPU Завершение с дампом памяти Процесс превысил лимит процессорного времени Исключение
SIGXFSZ Завершение с дампом памяти Процесс превысил допустимый размер файла Исключение

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

SA_SIGINFO

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

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

Большинство дополнительных кодов специфичны для каждого сигнала. Коды, общие для всех сигналов:

Код Описание
SI_USER Сигнал послан функцией kill() (или утилитой kill)
SI_QUEUE Сигнал послан функцией sigqueue()
SI_TIMER Сигнал послан по истечении времени, установленного функцией timer_settime()
SI_ASYNCIO Сигнал послан по завершении запроса на «асинхронный ввод-вывод»
SI_MESGQ Сигнал послан по появлению сообщения в пустой «очереди сообщений Unix»

См. также

Ссылки



Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать реферат

Полезное


Смотреть что такое "Сигналы (UNIX)" в других словарях:

  • Single Unix Specification — POSIX® (англ. Portable Operating System Interface for Unix  Переносимый интерфейс операционных систем Unix)  набор стандартов, описывающих интерфейсы между операционной системой и прикладной программой. Стандарт создан для обеспечения… …   Википедия

  • Процесс-зомби — Процесс зомби, зомби (англ. zombie process, англ. defunct process)  дочерний процесс в Unix системе, завершивший своё выполнение, но ещё присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу… …   Википедия

  • Zombie — Процесс зомби, зомби (англ. zombie process, англ. defunct process) дочерний процесс в Unix системе, завершивший своё выполнение, но еще присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код… …   Википедия

  • Зомби-процесс — Процесс зомби, зомби (англ. zombie process, англ. defunct process) дочерний процесс в Unix системе, завершивший своё выполнение, но еще присутствующий в списке процессов операционной системы, чтобы дать родительскому процессу считать код… …   Википедия

  • Сигнал (значения) — Сигнал изменение физической величины, несущее информацию, кодированную определённым способом, либо синхронизированное (заранее оговоренное с получателем) отсутствие изменения физической величины. Одно из фундаментальных понятий кибернетики. В… …   Википедия

  • Fork — У этого термина существуют и другие значения, см. Форк (значения). В Unix системах, fork()  системный вызов, создающий новый процесс( потомок), который является почти точной копией процесса( родителя), выполняющего этот вызов. Между… …   Википедия

  • TTY-абстракция — Стиль этой статьи неэнциклопедичен или нарушает нормы русского языка. Статью следует исправить согласно стилистическим правилам Википедии. У этого термина существуют и другие значения, см. Tty. Подсистема TTY, или TTY абстракция  это одна из …   Википедия

  • POSIX — Хронологическое дерево стандартов UNIX API POSIX® (англ. Portable Operating System Interface for Unix  Переносимый интерфейс опера …   Википедия

  • SIGTTIN — Описание: Чтение с терминала фоновой задачей По умолчанию: приостановить выполнение процесса коды SA SIGINFO (не имеет специфических кодов) В POSIX системах, SIGTTIN  сигнал, посылаемый фоновой задаче при попытке чтения с управляющего… …   Википедия

  • SIGTTOU — Описание: Вывод на терминал фоновой задачей По умолчанию: приостановить выполнение процесса коды SA SIGINFO (не имеет специфических кодов) В POSIX системах, SIGTTOU  сигнал посылаемый фоновой задаче, при попытке вывода на управляющий… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»