сигнал — Linux / Unix Command

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

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

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

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

Срок

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

Ign

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

ядро

Действие по умолчанию — завершить процесс и сбросить ядро.

Стоп

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

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

СигналСтоимостьдействиеКомментарий
или смерть контролирующего процесса
SIGINT2СрокПрерывание с клавиатуры
SIGQUIT3ядроВыйти с клавиатуры
SIGILL4ядроНезаконная инструкция
SIGABRT6ядроПрервать сигнал от abort (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СрокPollable событие (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 включительно, поведение по умолчанию для SIGSYSSIGXCPUSIGXFSZ, и (на архитектурах, отличных от 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, Sun)
SIGUNUSED-,31, —СрокНеиспользованный сигнал (будет SIGSYS)

(Сигнал 29 SIGINFO / SIGPWR на альфе но SIGLOST на спарке.)

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

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

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_pid и si_uid этой структуры могут использоваться для получения PID и реального идентификатора пользователя процесса, отправляющего сигнал.
  3. Сигналы в реальном времени доставляются в гарантированном порядке. Несколько сигналов реального времени одного типа доставляются в том порядке, в котором они были отправлены. Если различные сигналы реального времени отправляются процессу, они доставляются, начиная с сигнала с наименьшим номером. (То есть сигналы с низким номером имеют наивысший приоритет.)

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

    Согласно POSIX, реализация должна позволять не менее _POSIX_SIGQUEUE_MAX (32) сигналов реального времени ставиться в очередь в процесс. Однако вместо того, чтобы устанавливать ограничение для каждого процесса, Linux налагает общесистемное ограничение на количество поставленных в очередь сигналов реального времени для всех процессов. Этот лимит можно просмотреть (и с привилегиями), изменив его через файл / proc / sys / kernel / rtsig-max. Связанный файл / proc / sys / kernel / rtsig-max можно использовать, чтобы узнать, сколько сигналов реального времени находится в очереди.

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

    POSIX.1

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

    Ссылка на основную публикацию