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

Linux поддържа както надеждни сигнали POSIX (наричани по-долу "стандартни сигнали"), така и POSIX сигнали в реално време.

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

Linux поддържа стандартните сигнали, изброени по-долу. Няколко номера на сигнала са зависими от архитектурата, както е посочено в колоната "Стойност". (Когато са дадени три стойности, първата е обикновено валидна за алфа и sparc, средната за i386, ppc и sh, а последната за mips.

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

Записите в графата "Действие" в таблицата определят действието по подразбиране за сигнала, както следва:

термин

Действието по подразбиране е да прекратите процеса.

Ign

Действието по подразбиране е да пренебрегнете сигнала.

сърцевина

Действието по подразбиране е да се прекрати процесът и да се изтече ядрото.

Спри се

Действието по подразбиране е да спрете процеса.

Първо сигналите, описани в първоначалния стандарт POSIX.1.

сигнал стойност действие коментар
или смърт на контролиращия процес
SIGINT 2 термин Прекъсване от клавиатурата
SIGQUIT 3 сърцевина Излез от клавиатурата
SIGILL 4 сърцевина Незаконодателна инструкция
SIGABRT 6 сърцевина Прекратяване на сигнала от отказ (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 термин Полезно събитие (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 сърцевина Превишен срок на CPU (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 термин I / O сега е възможно (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 на 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 за сигнализиране (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 ), за да видите как се използва команда на вашия компютър.