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:
- 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.
- 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.
- 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.