Skip to main content

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

Основы Linux: сигналы и управление процессами (Април 2025)

Основы Linux: сигналы и управление процессами (Април 2025)
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сърцевинаПревишен срок на CPU (4.2 BSD)
SIGXFSZ25,25,31сърцевинаПревишен е ограничението за размера на файла (4.2 BSD)

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

Следващите различни други сигнали.

сигналстойностдействиекоментар
SIGEMT7,-,7термин
SIGSTKFLT-,16,-терминКорекция на копроцесор (неизползвана)
SIGIO23,29,22терминI / O сега е възможно (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 на 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_pid и si_uid полета от тази структура могат да се използват за получаване на PID и истински потребителски идентификатор на процеса, изпращащ сигнала.
  3. Сигналите в реално време се доставят в гарантиран ред. Няколко сигнали от същия тип в реално време се доставят в реда, в който са изпратени. Ако в процеса се изпращат различни сигнали в реално време, те се предават, като се започне с най-нискочервения сигнал. (Т.е. сигналите с нисък номер имат най-висок приоритет.)

Ако по време на процес се очаква сигнал от стандартния и в реално време, POSIX го оставя неопределен, който се доставя първо. Linux, както и много други приложения, дава приоритет на стандартните сигнали в този случай.

Според POSIX, реализацията трябва да позволява поне _POSIX_SIGQUEUE_MAX (32) сигнали в реално време да бъдат поставени на опашка в процес. Въпреки това, вместо да поставя лимит за всеки процес, Linux налага ограничения в целия брой на сигналите в реално време в реално време за всички процеси.

Тази граница може да бъде преглеждана (и с привилегия) променена чрез / Proc / сис / ядро ​​/ rtsig-макс файл. Свързан файл, / Proc / сис / ядро ​​/ rtsig-макс , може да се използва, за да разберете колко сигнали в реално време в момента са поставени на опашка.

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

POSIX.1

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