Skip to main content

Signál - príkaz Linux / Unix

Anonim

Linux podporuje obe spoľahlivé signály POSIX (ďalej len "štandardné signály") a signály POSIX v reálnom čase.

Štandardné signály

Linux podporuje štandardné signály uvedené nižšie. Niektoré čísla signálov sú závislé od architektúry, ako je uvedené v stĺpci "Hodnota". (Kde sú uvedené tri hodnoty, prvý z nich je zvyčajne platný pre alfa a sparc, stredný pre i386, ppc a sh a posledný pre mips.

A - znamená, že na príslušnej architektúre chýba signál.)

Položky v stĺpci "Akcia" v tabuľke určujú predvolenú akciu signálu takto:

termín

Predvolenou akciou je ukončenie procesu.

IGN

Predvolenou akciou je ignorovanie signálu.

jadro

Predvolenou akciou je ukončenie procesu a výpisu jadra.

prestať

Predvolenou akciou je zastavenie procesu.

Najskôr signály opísané v pôvodnom štandarde POSIX.1.

signálhodnotaakčnékomentár
alebo smrť kontrolného procesu
SIGINT2termínPrerušenie z klávesnice
SIGQUIT3jadroUkončite klávesnicu
Sigillo4jadroNezákonné pokyny
SIGABRT6jadroZrušiť signál z prerušiť (3)
SIGFPE8jadroVýnimka s pohyblivým bodom
SIGKILL9termínZabite signál
SIGSEGV11jadroNeplatná referencia pamäte
sigpipe13termínZlomené potrubie: napíšte do potrubia bez čítačky
SIGALRM14termínČasový signál od poplach (2)
SIGTERM15termínSignál ukončenia
SIGUSR130,10,16termínPoužívateľsky definovaný signál 1
SIGUSR231,12,17termínPoužívateľsky definovaný signál 2
SIGCHLD20,17,18IGNDieťa bolo zastavené alebo ukončené
SIGCONT19,18,25 Pokračujte, ak ste skončili
SIGSTOP17,19,23prestaťStop proces
SIGTSTP18,20,24prestaťZastaviť napísané na tty
SIGTTIN21,21,26prestaťtty vstup pre proces na pozadí
SIGTTOU22,22,27prestaťtty výstup pre proces na pozadí

SignálySIGKILL aSIGSTOP nemôžu byť chytené, zablokované alebo ignorované.

Ďalšie signály nie sú v štandarde POSIX.1, ale sú opísané v SUSv2 a SUSv3 / POSIX 1003.1-2001.

signálhodnotaakčnékomentár
SIGPOLL termínPoložiteľná udalosť (Sys V). Synonymum SIGIO
SIGPROF27,27,29termínVypršal časovač profilovania
SIGSYS12,-,12jadroNesprávny argument pre rutinu (SVID)
SIGTRAP5jadroZachytenie trasovania / zlomenia
SIGURG16,23,21IGNNaliehavý stav na zásuvke (4.2 BSD)
SIGVTALRM26,26,28termínVirtuálne budík (4.2 BSD)
SIGXCPU24,24,30jadroPrekročenie časového limitu CPU (4.2 BSD)
SIGXFSZ25,25,31jadroLimit veľkosti súboru bol prekročený (4.2 BSD)

Až do a vrátane Linuxu 2.2, predvolené správanie preSIGSYS, SIGXCPU, SIGXFSZ, a (na iných architektúrach ako SPARC a MIPS)SIGBUS bolo ukončiť proces (bez výpisu jadra). (Na niektorých ďalších jednotkách je predvolená akcia preSIGXCPU aSIGXFSZ je ukončenie procesu bez výpisu jadra.) Linux 2.4 vyhovuje požiadavkám POSIX 1003.1-2001 pre tieto signály a ukončuje proces s jadrom výpisu.

Ďalšie rôzne ďalšie signály.

signálhodnotaakčnékomentár
SIGEMT7,-,7termín
SIGSTKFLT-,16,-termínStatická chyba koprocesora (nepoužívaná)
Sigi23,29,22termínI / O je teraz možné (4.2 BSD)
SIGCLD-,-,18IGNSynonymom pre SIGCHLD
SIGPWR29,30,19termínVýpadok napájania (systém V)
SIGINFO29,-,- Synonymom pre SIGPWR
SIGLOST-,-,-termínZáloha súboru sa stratila
SIGWINCH28,28,20IGNSignál zmeny veľkosti okna (4.3 BSD, Sun)
SIGUNUSED-,31,-termínNepoužitý signál (bude SIGSYS)

(Signál 29 jeSIGINFO / SIGPWR na alfa aleSIGLOST na sparc.)

SIGEMT nie je špecifikovaný v POSIX 1003.1-2001, ale napriek tomu sa objavuje vo väčšine ostatných Unic, kde jeho predvolená akcia zvyčajne ukončí proces s výpisom jadra.

SIGPWR (ktoré nie je uvedené v POSIX 1003.1-2001) je zvyčajne ignorované v predvolenom nastavení pre tie ostatné Unices, kde sa zobrazuje.

Sigi (ktorý nie je špecifikovaný v POSIX 1003.1-2001) je predvolene ignorovaný na niekoľkých ďalších jednotkách.

Signály v reálnom čase

Linux podporuje signály v reálnom čase, ktoré boli pôvodne definované v rozšíreniach POSIX.4 v reálnom čase (a teraz sú zahrnuté v POSIX 1003.1-2001). Linux podporuje 32 signálov v reálnom čase, číslovaných od 32 (SIGRTMIN) až 63 (SIGRTMAX). (Programy by sa vždy mali vzťahovať na signály v reálnom čase pomocou notácieSIGRTMIN+ n, pretože rozsah čísel signálov v reálnom čase sa v celej jednotke mení.)

Na rozdiel od štandardných signálov signály v reálnom čase nemajú vopred definované významy: celá sada signálov v reálnom čase môže byť použitá na účely definované aplikáciou. (Všimnite si však, že implementácia LinuxThreads používa prvé tri signály v reálnom čase.)

Predvolená akcia pre neošetrený signál v reálnom čase je ukončenie procesu prijímania.

Signály v reálnom čase sa vyznačujú nasledovnými:

  1. Mnohé prípady signálov v reálnom čase môžu byť zaradené do frontu. Na rozdiel od toho, ak sa dodáva viacnásobné inštancie štandardného signálu, zatiaľ čo je tento signál v súčasnosti zablokovaný, iba jedna inštancia je zaradená do frontu.
  2. Ak je signál poslaný pomocousigqueue(2) sa môže vyslať so signálom sprievodná hodnota (buď celé číslo alebo ukazovateľ). Ak prijímací proces vytvorí obsluhu pre tento signál pomocouSA_SIGACTION flag nasigaction(2) potom môže tieto údaje získať prostredníctvom si_value oblasť siginfo_t štruktúra prešla ako druhý argument pre psovoda. Okrem toho si_pid a si_uid polia tejto štruktúry môžu byť použité na získanie PID a skutočného ID užívateľa procesu odosielania signálu.
  3. Signály v reálnom čase sú dodávané v zaručenom poradí. Viaceré signály v reálnom čase rovnakého typu sa doručujú v poradí, v akom boli odoslané. Ak sa do procesu odosielajú rôzne signály v reálnom čase, sú odovzdávané počnúc signálom s najnižším číslom. (T.j. signály s nízkym číslom majú najvyššiu prioritu.)

Ak sú v procese čakajúce štandardné aj signály v reálnom čase, POSIX to necháva nespecifikované, ktoré sa doručia ako prvé. Linux, rovnako ako mnohé iné implementácie, dáva prednosť štandardným signálom v tomto prípade.

Podľa POSIX by implementácia mala umožňovať, aby aspoň aspoň _POSIX_SIGQUEUE_MAX (32) signály v reálnom čase boli zaradené do frontu do procesu. Namiesto umiestnenia limitu na proces, však Linux zavádza celkový systémový limit počtu signálov v reálnom čase v reálnom čase pre všetky procesy.

Tento limit je možné zobraziť (a s oprávnením) zmenený prostredníctvom / Preco / sys / kernel / rtsig-max súboru. Súvisiaci súbor, / Preco / sys / kernel / rtsig-max , môžete zistiť, koľko signálov v reálnom čase je v súčasnosti zaradených do frontu.

KONFORMÁCIA DO

POSIX.1

dôležité: Použi muž príkaz ( % muž ), aby ste zistili, ako sa príkaz používa vo vašom konkrétnom počítači.