Linux podporuje obě spolehlivé signály POSIX (dále jen "standardní signály") a signály POSIX v reálném čase.
Standardní signály
Linux podporuje standardní signály uvedené níže. Několik čísel signálů závisí na architektuře, jak je uvedeno ve sloupci "Hodnota". (Kde jsou uvedeny tři hodnoty, první je obvykle platná pro alfa a sparc, střední pro i386, ppc a sh a poslední pro mips.
A - označuje, že na příslušné architektuře chybí signál.)
Položky ve sloupci "Akce" tabulky určují výchozí akci pro signál, a to následujícím způsobem:
Období
Výchozí akce je ukončení procesu.
Ign
Výchozí akce je ignorovat signál.
Jádro
Výchozí akce je ukončení procesu a výpisu jádra.
Stop
Výchozí akce je ukončení procesu.
Nejprve signály popsané v původním standardu POSIX.1.
Signál | Hodnota | Akce | Komentář |
nebo smrti řídícího procesu | |||
SIGINT | 2 | Období | Přerušení z klávesnice |
SIGQUIT | 3 | Jádro | Ukončete z klávesnice |
SIGILL | 4 | Jádro | Nelegální instrukce |
SIGABRT | 6 | Jádro | Zrušit signál z přerušení (3) |
SIGFPE | 8 | Jádro | Výjimka s pohyblivou čárou |
SIGKILL | 9 | Období | Zabijte signál |
SIGSEGV | 11 | Jádro | Neplatná reference paměti |
SIGPIPE | 13 | Období | Zlomené potrubí: zapište do potrubí bez čteček |
SIGALRM | 14 | Období | Signál časovače z alarmu (2) |
SIGTERM | 15 | Období | Signál ukončení |
SIGUSR1 | 30,10,16 | Období | Uživatelsky definovaný signál 1 |
SIGUSR2 | 31,12,17 | Období | Uživatelsky definovaný signál 2 |
SIGCHLD | 20, 17, 18 | Ign | Dítě přestalo nebo skončilo |
SIGCONT | 19, 18, 25 | Pokračujte, pokud je zastaven | |
SIGSTOP | 17, 19, 23 | Stop | Stop proces |
SIGTSTP | 18, 20, 24 | Stop | Zastavte se na tty |
SIGTTIN | 21, 21, 26 | Stop | tty vstup pro proces na pozadí |
SIGTTOU | 22, 22, 27 | Stop | tty výstup pro proces pozadí |
Signály SIGKILL a SIGSTOP nelze zachytit, zablokovat nebo ignorovat.
Dále signály, které nejsou v standardu POSIX.1, ale popsány v SUSv2 a SUSv3 / POSIX 1003.1-2001.
Signál | Hodnota | Akce | Komentář |
SIGPOLL | Období | Položitelná událost (Sys V). Synonymum SIGIO | |
SIGPROF | 27, 27, 29 | Období | Vypršel časový limit profilování |
SIGSYS | 12, -, 12 | Jádro | Špatný argument pro rutinu (SVID) |
SIGTRAP | 5 | Jádro | Zachycovač tras / zlom |
SIGURG | 16, 23, 21 | Ign | Naléhavá podmínka na zásuvce (4.2 BSD) |
SIGVTALRM | 26,26,28 | Období | Virtuální budík (4.2 BSD) |
SIGXCPU | 24, 24, 30 | Jádro | Překročen časový limit CPU (4.2 BSD) |
SIGXFSZ | 25,25,31 | Jádro | Limit velikosti souboru byl překročen (4.2 BSD) |
Až do a včetně Linuxu 2.2 bylo výchozím chováním pro SIGSYS , SIGXCPU , SIGXFSZ a (na architekturách jiných než SPARC a MIPS) SIGBUS ukončit proces (bez jádra). (U některých jiných jednotek je výchozí akce pro SIGXCPU a SIGXFSZ ukončit proces bez výpisu jádra.) Linux 2.4 vyhovuje požadavkům POSIX 1003.1-2001 pro tyto signály a ukončí proces se základní výpisem.
Další různé další signály.
Signál | Hodnota | Akce | Komentář |
SIGEMT | 7, -, 7 | Období | |
SIGSTKFLT | -, 16, - | Období | Chyba stacků na koprocesoru (nevyužitá) |
SIGIO | 23,29,22 | Období | I / O nyní možné (4.2 BSD) |
SIGCLD | -, -, 18 | Ign | Synonymum pro SIGCHLD |
SIGPWR | 29,30,19 | Období | Výpadek napájení (systém V) |
SIGINFO | 29, -, - | Synonymum pro SIGPWR | |
SIGLOST | -, -, - | Období | Zámek souboru byl ztracen |
SIGWINCH | 28, 28, 20 | Ign | Signál změny velikosti okna (4.3 BSD, Sun) |
SIGUNUSED | -, 31, - | Období | Nepoužitý signál (bude SIGSYS) |
(Signál 29 je SIGINFO / SIGPWR na alfa, ale SIGLOST na sparc.)
SIGEMT není určen v POSIX 1003.1-2001, ale nikdy se neobjeví na většině ostatních Unic, kde výchozí akce obvykle ukončí proces s jádrem.
SIGPWR (který není specifikován v POSIX 1003.1-2001) je obvykle ignorován ve výchozím nastavení u ostatních Unic, kde se zobrazuje.
SIGIO (který není specifikován v POSIX 1003.1-2001) je ve výchozím nastavení ignorován na několika dalších jednotkách.
Signály v reálném čase
Linux podporuje signály v reálném čase, jak byly původně definovány v rozšířeních POSIX.4 v reálném čase (a nyní jsou zahrnuty v POSIXu 1003.1-2001). Linux podporuje 32 signálů v reálném čase, číslovaných od 32 ( SIGRTMIN ) do 63 ( SIGRTMAX ). (Programy by se měly vždy vztahovat na signály v reálném čase pomocí notace SIGRTMIN + n, protože rozsah čísel signálů v reálném čase se mění v jednotkách.)
Na rozdíl od standardních signálů signály v reálném čase nemají předem definované významy: celá sada signálů v reálném čase může být použita pro účely definované aplikací. (Všimněte si však, že implementace LinuxThreads používá první tři signály v reálném čase.)
Výchozí akcí pro neošetřený signál v reálném čase je ukončení procesu přijímání.
Signály v reálném čase se vyznačují následujícími skutečnostmi:
- Více instancí signálů v reálném čase může být ve frontě. Naproti tomu, pokud jsou vysílány více instancí standardního signálu, zatímco je tento signál aktuálně zablokován, je pouze jedna instance zařazena do fronty.
- Je-li signál vyslán pomocí sigqueu (2), lze s ním vyslat doprovodnou hodnotu (celé číslo nebo ukazatel). Pokud přijímající proces vytvoří obsluhu tohoto signálu pomocí příznaku SA_SIGACTION k sigaction (2), pak může získat tato data přes pole si_value struktury siginfo_t, která byla předána psovodi druhému argumentu. Kromě toho pole si_pid a si_uid této struktury mohou být použity k získání PID a skutečné ID uživatele procesu odesílání signálu.
- Signály v reálném čase jsou dodávány v zaručeném pořadí. Více signálů v reálném čase stejného typu je doručeno v pořadí, v jakém byly odeslány. Pokud jsou do procesu odesílány různé signály v reálném čase, jsou dodávány s počátečním signálem s nejnižším číslem. (Tzn. Že signály s nízkým číslem mají nejvyšší prioritu.)
Pokud pro proces probíhají jak standardní signály, tak signály v reálném čase, POSIX zanechává nejprve neurčené, které jsou dodány. Linux, stejně jako mnoho dalších implementací, dává přednost standardním signálům v tomto případě.
Podle POSIX by implementace měla umožňovat, aby alespoň alespoň _POSIX_SIGQUEUE_MAX (32) signály v reálném čase byly zařazeny do fronty procesu. Spíše než umístit limity na proces, Linux zavádí systémový limit pro počet frontálních signálů v reálném čase pro všechny procesy.
Tento limit lze prohlížet (a s oprávněním) měnit pomocí souboru / proc / sys / kernel / rtsig-max . Související soubor, / proc / sys / kernel / rtsig-max , lze použít k zjištění, kolik signálů v reálném čase jsou nyní ve frontě.
KONFORMACE DO
POSIX.1
Důležité: Použijte příkaz man ( % man ), abyste zjistili, jaký příkaz se používá v konkrétním počítači.