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 е да се прекрати процесът без ядро.) Линукс 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 използва първите три сигнали в реално време.)
Действието по подразбиране за некодиран сигнал в реално време е да прекрати процеса на получаване.
Сигналите в реално време се отличават със следното:
- Няколко случая на сигнали в реално време могат да бъдат поставени на опашка. За разлика от това, ако се подават множество копия на стандартен сигнал, докато този сигнал понастоящем е блокиран, само един от тях е в опашка.
- Ако сигналът е изпратен с помощта наsigqueue(2), със сигнала може да бъде изпратена придружаваща стойност (цяло число или показалец). Ако процесът на получаване установи обработващ сигнал за този сигнал с помощта наSA_SIGACTION флаг доsigaction(2), то може да получи тези данни чрез si_value област на siginfo_t структурата преминава като втори аргумент на манипулатора. Освен това, si_pid и si_uid полета от тази структура могат да се използват за получаване на PID и истински потребителски идентификатор на процеса, изпращащ сигнала.
- Сигналите в реално време се доставят в гарантиран ред. Няколко сигнали от същия тип в реално време се доставят в реда, в който са изпратени. Ако в процеса се изпращат различни сигнали в реално време, те се предават, като се започне с най-нискочервения сигнал. (Т.е. сигналите с нисък номер имат най-висок приоритет.)
Ако по време на процес се очаква сигнал от стандартния и в реално време, POSIX го оставя неопределен, който се доставя първо. Linux, както и много други приложения, дава приоритет на стандартните сигнали в този случай.
Според POSIX, реализацията трябва да позволява поне _POSIX_SIGQUEUE_MAX (32) сигнали в реално време да бъдат поставени на опашка в процес. Въпреки това, вместо да поставя лимит за всеки процес, Linux налага ограничения в целия брой на сигналите в реално време в реално време за всички процеси.
Тази граница може да бъде преглеждана (и с привилегия) променена чрез / Proc / сис / ядро / rtsig-макс файл. Свързан файл, / Proc / сис / ядро / rtsig-макс , може да се използва, за да разберете колко сигнали в реално време в момента са поставени на опашка.
СЪОТВЕТСТВИЕ С
POSIX.1
Важно: Използвай мъж команда ( % man ), за да видите как се използва команда на вашия компютър.