Signál - príkaz Linux / Unix

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ál hodnota akčné komentár
alebo smrť kontrolného procesu
SIGINT 2 termín Prerušenie z klávesnice
SIGQUIT 3 jadro Ukončite klávesnicu
Sigillo 4 jadro Nezákonné pokyny
SIGABRT 6 jadro Zrušiť signál z prerušenia (3)
SIGFPE 8 jadro Výnimka s pohyblivým bodom
SIGKILL 9 termín Zabite signál
SIGSEGV 11 jadro Neplatná referencia pamäte
sigpipe 13 termín Zlomené potrubie: napíšte do potrubia bez čítačky
SIGALRM 14 termín Časový signál z alarmu (2)
SIGTERM 15 termín Signál ukončenia
SIGUSR1 30,10,16 termín Používateľsky definovaný signál 1
SIGUSR2 31,12,17 termín Používateľsky definovaný signál 2
SIGCHLD 20,17,18 IGN Dieťa bolo zastavené alebo ukončené
SIGCONT 19,18,25 Pokračujte, ak ste skončili
SIGSTOP 17,19,23 prestať Stop proces
SIGTSTP 18,20,24 prestať Zastaviť napísané na tty
SIGTTIN 21,21,26 prestať tty vstup pre proces na pozadí
SIGTTOU 22,22,27 prestať tty výstup pre proces na pozadí

Signály SIGKILL a SIGSTOP 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ál hodnota akčné komentár
SIGPOLL termín Položiteľná udalosť (Sys V). Synonymum SIGIO
SIGPROF 27,27,29 termín Vypršal časovač profilovania
SIGSYS 12, - 12 jadro Nesprávny argument pre rutinu (SVID)
SIGTRAP 5 jadro Zachytenie trasovania / zlomenia
SIGURG 16,23,21 IGN Naliehavý stav na zásuvke (4.2 BSD)
SIGVTALRM 26,26,28 termín Virtuálne budík (4.2 BSD)
SIGXCPU 24,24,30 jadro Prekročenie časového limitu CPU (4.2 BSD)
SIGXFSZ 25,25,31 jadro Limit veľkosti súboru bol prekročený (4.2 BSD)

Až do a vrátane Linuxu 2.2, predvolené správanie pre SIGSYS , SIGXCPU , SIGXFSZ a (na iných architektúrach než SPARC a MIPS) SIGBUS bolo ukončenie procesu (bez výpisu jadra). (V niektorých ďalších jednotkách je predvolenou akciou pre SIGXCPU a SIGXFSZ ukončenie procesu bez výpisu jadra.) Linux 2.4 spĺňa požiadavky POSIX 1003.1-2001 pre tieto signály a ukončuje proces s výpisom jadra.

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

signál hodnota akčné komentár
SIGEMT 7 - 7 termín
SIGSTKFLT - 16, - termín Statická chyba koprocesora (nepoužívaná)
Sigi 23,29,22 termín I / O je teraz možné (4.2 BSD)
SIGCLD -, -, 18 IGN Synonymom pre SIGCHLD
SIGPWR 29,30,19 termín Výpadok napájania (systém V)
SIGINFO 29, -, - Synonymom pre SIGPWR
SIGLOST -, -, - termín Záloha súboru sa stratila
SIGWINCH 28,28,20 IGN Signál zmeny veľkosti okna (4.3 BSD, Sun)
SIGUNUSED - 31, - termín Nepoužitý signál (bude SIGSYS)

(Signál 29 je SIGINFO / SIGPWR na alfa, ale SIGLOST na sparc.)

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

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

Funkcia SIGIO (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 ) do 63 ( SIGRTMAX ). (Programy by sa vždy mali vzťahovať na signály v reálnom čase pomocou notácie SIGRTMIN + 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 vyslaný pomocou sigqueu (2), môže sa s ním vyslať doprovodná hodnota (buď celé číslo alebo ukazovateľ). Ak prijímací proces vytvorí obsluhu pre tento signál pomocou príznaku SA_SIGACTION na sigaction (2), potom môže získať tieto údaje cez pole si_value štruktúry siginfo_t prešlým ako druhý argument psovodovi. Okrem toho môžu byť polia si_pid a si_uid tejto štruktúry 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. (Tzn., Že 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 súboru / proc / sys / kernel / rtsig-max . Súvisiaci súbor / proc / sys / kernel / rtsig-max môže byť použitý na zistenie, koľko signálov v reálnom čase je v súčasnosti zaradených do frontu.

KONFORMÁCIA DO

POSIX.1

Dôležité: Pomocou príkazu man ( % man ) môžete zistiť, ako sa príkaz používa vo vašom konkrétnom počítači.