Signál - příkaz Linux / Unix

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:

  1. 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.
  2. 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.
  3. 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.