Skip to main content

Сигнал - команда Linux / Unix

Основы Linux: сигналы и управление процессами (Июнь 2026)

Основы Linux: сигналы и управление процессами (Июнь 2026)
Anonim

Linux поддерживает как надежные сигналы POSIX (далее «стандартные сигналы»), так и сигналы POSIX реального времени.

Стандартные сигналы

Linux поддерживает стандартные сигналы, перечисленные ниже. Некоторые номера сигналов зависят от архитектуры, как указано в столбце «Значение». (Там, где указаны три значения, первый из них обычно действителен для альфа и sparc, средний для i386, ppc и sh, а последний для mips.

A - означает, что в соответствующей архитектуре отсутствует сигнал.)

Записи в столбце «Действие» таблицы определяют действие по умолчанию для сигнала следующим образом:

Срок

Действие по умолчанию - это прервать процесс.

Ign

Действие по умолчанию - игнорировать сигнал.

ядро

Действие по умолчанию - это завершение процесса и ядро ​​дампа.

Стоп

Действие по умолчанию - остановить процесс.

Сначала сигналы, описанные в исходном стандарте POSIX.1.

СигналЗначениедействиеКомментарий
или смерти процесса контроля
SIGINT2СрокПрерывание с клавиатуры
SIGQUIT3ядроВыйти с клавиатуры
SIGILL4ядроНезаконная инструкция
SIGABRT6ядроПрерывать сигнал от выкинуть (3)
SIGFPE8ядроИсключение с плавающей запятой
SIGKILL9СрокУбить сигнал
SIGSEGV11ядроНедопустимая ссылка на память
SIGPIPE13СрокСломанная труба: пишите на трубу без считывателей
SIGALRM14СрокСигнал таймера от тревога (2)
SIGTERM15СрокСигнал о завершении
SIGUSR130,10,16СрокПользовательский сигнал 1
SIGUSR231,12,17СрокПользовательский сигнал 2
SIGCHLD20,17,18IgnРебенок прекратил или прекратил
SIGCONT19,18,25 Продолжить, если остановить
SIGSTOP17,19,23СтопОстановить процесс
SIGTSTP18,20,24СтопОстановить на tty
SIGTTIN21,21,26Стопtty для фонового процесса
SIGTTOU22,22,27Стопвывод tty для фонового процесса

СигналыSIGKILL а такжеSIGSTOP не могут быть пойманы, заблокированы или проигнорированы.

Затем сигналы не соответствуют стандарту POSIX.1, но описаны в SUSv2 и SUSv3 / POSIX 1003.1-2001.

СигналЗначениедействиеКомментарий
SIGPOLL СрокЗагрязняющее событие (Sys V). Синоним SIGIO
SIGPROF27,27,29СрокТаймер профайла истек
SIGSYS12,-,12ядроПлохой аргумент для обычной (SVID)
SIGTRAP5ядроЛовушка трассировки / прерывания
SIGURG16,23,21IgnСрочное условие на разъем (4.2 BSD)
SIGVTALRM26,26,28СрокВиртуальный будильник (4.2 BSD)
SIGXCPU24,24,30ядроПревышен лимит времени процессора (4.2 BSD)
SIGXFSZ25,25,31ядроПредел размера файла превышен (4.2 BSD)

До и включая Linux 2.2 поведение по умолчанию дляSIGSYS, SIGXCPU, SIGXFSZ, и (на архитектурах, отличных от SPARC и MIPS)SIGBUS было прекращение процесса (без дампа ядра). (В некоторых других Unices действие по умолчанию дляSIGXCPU а такжеSIGXFSZ заключается в прекращении процесса без основного дампа.) Linux 2.4 соответствует требованиям POSIX 1003.1-2001 для этих сигналов, завершая процесс с дампом ядра.

Затем следуют различные другие сигналы.

СигналЗначениедействиеКомментарий
SIGEMT7,-,7Срок
SIGSTKFLT-,16,-СрокОшибка стека на сопроцессоре (не используется)
SIGIO23,29,22СрокТеперь возможен ввод-вывод (4.2 BSD)
SIGCLD-,-,18IgnСиноним SIGCHLD
SIGPWR29,30,19СрокСбой питания (система V)
SIGINFO29,-,- Синоним SIGPWR
SIGLOST-,-,-СрокБлокировка файла потеряна
SIGWINCH28,28,20IgnСигнал изменения размера окна (4.3 BSD, Солнце)
SIGUNUSED-,31,-СрокНеиспользуемый сигнал (будет SIGSYS)

(Сигнал 29SIGINFO / SIGPWR на альфа, ноSIGLOST на sparc.)

SIGEMT не указан в POSIX 1003.1-2001, но никогда не появляется в большинстве других Unices, где его действие по умолчанию обычно завершает процесс с дампом ядра.

SIGPWR (который не указан в POSIX 1003.1-2001) обычно игнорируется по умолчанию в тех других Unices, где он появляется.

SIGIO (который не указан в POSIX 1003.1-2001) по умолчанию игнорируется несколькими другими Unices.

Сигналы в реальном времени

Linux поддерживает сигналы в реальном времени, как это первоначально было определено в POSIX.4 в режиме реального времени (и теперь включено в POSIX 1003.1-2001). Linux поддерживает 32 сигнала в реальном времени, пронумерованных от 32 (SIGRTMIN) до 63 (SIGRTMAX). (Программы всегда должны ссылаться на сигналы в реальном времени с использованием обозначенийSIGRTMIN+ n, так как диапазон номеров сигналов в реальном времени зависит от Unices.)

В отличие от стандартных сигналов сигналы в реальном времени не имеют предопределенных значений: весь набор сигналов в реальном времени может использоваться для целей приложения. (Обратите внимание, однако, что реализация LinuxThreads использует первые три сигнала в реальном времени.)

Действие по умолчанию для необработанного сигнала реального времени - это прекращение процесса приема.

Сигналы в реальном времени отличаются следующим:

  1. Несколько экземпляров сигналов в реальном времени могут быть поставлены в очередь. Напротив, если несколько экземпляров стандартного сигнала доставляются, пока этот сигнал заблокирован, тогда очередь помещается только в один экземпляр.
  2. Если сигнал отправляется с использованиемsigqueue(2), сопровождающее значение (целое или указательное) может быть отправлено с сигналом. Если процесс приема устанавливает обработчик для этого сигнала, используяsa_sigaction пометитьsigaction(2), то он может получить эти данные через si_value поле siginfo_t структура передана как второй аргумент обработчику. Кроме того, вкусный а также si_uid поля этой структуры могут использоваться для получения идентификатора PID и реального пользователя процесса, посылающего сигнал.
  3. Сигналы в реальном времени передаются в гарантированном порядке. Несколько сигналов в реальном времени того же типа доставляются в том порядке, в котором они были отправлены. Если разные сигналы в реальном времени отправляются в процесс, они доставляются, начиная с сигнала с наименьшим номером. (То есть, сигналы с наименьшим номером имеют наивысший приоритет.)

Если для процесса ожидаются как стандартные, так и сигналы в реальном времени, POSIX оставляет его неуказанным, который доставляется первым. Linux, как и многие другие реализации, придает приоритет стандартным сигналам в этом случае.

Согласно POSIX, реализация должна разрешить по меньшей мере _POSIX_SIGQUEUE_MAX (32) сигналы в реальном времени быть поставленными в очередь на процесс. Однако, вместо того, чтобы устанавливать ограничение для каждого процесса, Linux налагает общесистемное ограничение на количество очередей в реальном времени для всех процессов.

Этот лимит можно просмотреть (и с привилегией) изменить с помощью / Труды / SYS / ядро ​​/ rtsig-макс файл. Связанный файл, / Труды / SYS / ядро ​​/ rtsig-макс , можно использовать, чтобы узнать, сколько сигналов в реальном времени находится в очереди.

В СООТВЕТСТВИИ С

POSIX.1

Важный: Использовать человек команда ( % человек ), чтобы увидеть, как команда используется на вашем конкретном компьютере.