Linux поддерживает как надежные сигналы POSIX (в дальнейшем «стандартные сигналы»), так и сигналы реального времени POSIX.
Стандартные сигналы
Linux поддерживает стандартные сигналы, перечисленные ниже. Несколько номеров сигналов зависят от архитектуры, как указано в столбце «Значение». (Если даны три значения, первое обычно допустимо для alpha и sparc, среднее для i386, ppc и sh, а последнее для mips. A — означает, что сигнал отсутствует в соответствующей архитектуре.)
Записи в столбце «Действие» таблицы определяют действие по умолчанию для сигнала следующим образом:
Срок
Действие по умолчанию — завершить процесс.
Ign
Действие по умолчанию — игнорировать сигнал.
ядро
Действие по умолчанию — завершить процесс и сбросить ядро.
Стоп
Действие по умолчанию — остановить процесс.
Сначала сигналы, описанные в оригинальном стандарте POSIX.1.
Сигнал | Стоимость | действие | Комментарий |
или смерть контролирующего процесса | |||
SIGINT | 2 | Срок | Прерывание с клавиатуры |
SIGQUIT | 3 | ядро | Выйти с клавиатуры |
SIGILL | 4 | ядро | Незаконная инструкция |
SIGABRT | 6 | ядро | Прервать сигнал от abort (3) |
SIGFPE | 8 | ядро | Исключение с плавающей точкой |
SIGKILL | 9 | Срок | Сигнал убийства |
SIGSEGV | 11 | ядро | Неверная ссылка на память |
SIGPIPE | 13 | Срок | Сломанная труба: пиши в трубу без читателей |
SIGALRM | 14 | Срок | Сигнал таймера от тревоги (2) |
SIGTERM | 15 | Срок | Сигнал завершения |
SIGUSR1 | 30,10,16 | Срок | Определяемый пользователем сигнал 1 |
SIGUSR2 | 31,12,17 | Срок | Определяемый пользователем сигнал 2 |
SIGCHLD | 20,17,18 | Ign | Ребенок остановлен или прекращен |
SIGCONT | 19,18,25 | Продолжить, если остановлен | |
SIGSTOP | 17,19,23 | Стоп | Остановить процесс |
SIGTSTP | 18,20,24 | Стоп | Стоп набрал в tty |
SIGTTIN | 21,21,26 | Стоп | ввод tty для фонового процесса |
SIGTTOU | 22,22,27 | Стоп | вывод tty для фонового процесса |
Сигналы SIGKILL а также SIGSTOP не может быть пойман, заблокирован или проигнорирован.
Затем сигналы не в стандарте POSIX.1, но описаны в SUSv2 и SUSv3 / POSIX 1003.1-2001.
Сигнал | Стоимость | действие | Комментарий |
SIGPOLL | Срок | Pollable событие (Sys V). Синоним SIGIO | |
SIGPROF | 27,27,29 | Срок | Таймер профилирования истек |
SIGSYS | 12, -, 12 | ядро | Неверный аргумент для рутины (SVID) |
SIGTRAP | 5 | ядро | Трассировка / ловушка прерывания |
SIGURG | 16,23,21 | Ign | Срочное условие на розетке (4.2 BSD) |
SIGVTALRM | 26,26,28 | Срок | Виртуальный будильник (4.2 BSD) |
SIGXCPU | 24,24,30 | ядро | Превышено ограничение по времени процессора (4.2 BSD) |
SIGXFSZ | 25,25,31 | ядро | Превышен предел размера файла (4.2 BSD) |
До Linux 2.2 включительно, поведение по умолчанию для SIGSYS, SIGXCPU, SIGXFSZ, и (на архитектурах, отличных от SPARC и MIPS) SIGBUS должен был прекратить процесс (без дампа ядра). (В некоторых других Unices действие по умолчанию для SIGXCPU а также SIGXFSZ должен завершить процесс без дампа ядра.) Linux 2.4 соответствует требованиям POSIX 1003.1-2001 для этих сигналов, завершая процесс с помощью дампа ядра.
Далее различные другие сигналы.
Сигнал | Стоимость | действие | Комментарий |
SIGEMT | 7, -, 7 | Срок | |
SIGSTKFLT | -,16, — | Срок | Ошибка стека на сопроцессоре (не используется) |
SIGIO | 23,29,22 | Срок | Теперь возможен ввод / вывод (4.2 BSD) |
SIGCLD | -,-,18 | Ign | Синоним для SIGCHLD |
SIGPWR | 29,30,19 | Срок | Отказ питания (система V) |
SIGINFO | 29, -, — | Синоним SIGPWR | |
SIGLOST | -,-,- | Срок | Блокировка файла потеряна |
SIGWINCH | 28,28,20 | Ign | Сигнал изменения размера окна (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 использует первые три сигнала в реальном времени.)
Действие по умолчанию для необработанного сигнала реального времени — завершить процесс приема.
Сигналы в реальном времени отличаются следующим:
- Несколько экземпляров сигналов реального времени могут быть поставлены в очередь. Напротив, если несколько экземпляров стандартного сигнала доставляются, когда этот сигнал в настоящее время заблокирован, то только один экземпляр ставится в очередь.
- Если сигнал отправляется с помощью sigqueue(2) сопровождающее значение (целое число или указатель) может быть отправлено с сигналом. Если процесс приема устанавливает обработчик для этого сигнала, используя sa_sigaction флаг для sigaction(2) затем он может получить эти данные через поле si_value структуры siginfo_t, переданное в качестве второго аргумента обработчику. Кроме того, поля si_pid и si_uid этой структуры могут использоваться для получения PID и реального идентификатора пользователя процесса, отправляющего сигнал.
- Сигналы в реальном времени доставляются в гарантированном порядке. Несколько сигналов реального времени одного типа доставляются в том порядке, в котором они были отправлены. Если различные сигналы реального времени отправляются процессу, они доставляются, начиная с сигнала с наименьшим номером. (То есть сигналы с низким номером имеют наивысший приоритет.)
Если для процесса ожидают как стандартные сигналы, так и сигналы реального времени, POSIX оставляет его неуказанным, который доставляется первым. Linux, как и многие другие реализации, в этом случае отдает приоритет стандартным сигналам.
Согласно POSIX, реализация должна позволять не менее _POSIX_SIGQUEUE_MAX (32) сигналов реального времени ставиться в очередь в процесс. Однако вместо того, чтобы устанавливать ограничение для каждого процесса, Linux налагает общесистемное ограничение на количество поставленных в очередь сигналов реального времени для всех процессов. Этот лимит можно просмотреть (и с привилегиями), изменив его через файл / proc / sys / kernel / rtsig-max. Связанный файл / proc / sys / kernel / rtsig-max можно использовать, чтобы узнать, сколько сигналов реального времени находится в очереди.
В СООТВЕТСТВИИ С
POSIX.1
Важный: Используйте команду man (% man), чтобы увидеть, как команда используется на вашем компьютере.