Scroll to navigation

SIGNAL(7) Podręcznik programisty Linuksa SIGNAL(7)

NAZWA

signal - lista dostępnych sygnałów

OPIS

Linux wspiera zarówno rzeczywiste sygnały POSIX-owe (zwane dalej "sygnałami standardowymi"), jak i sygnały POSIX-owe czasu rzeczywistego.

Sygnały standardowe

Linux wspiera wymienione poniżej sygnały standardowe. Numery niektórych sygnałów zależą od architektury, co pokazano w kolumnie "Wartość". (Jeżeli podano trzy wartości, to zazwyczaj pierwsza obowiązuje dla architektur alpha i sparc, środkowa dla i386, ppc i sh, a ostatnia dla mips. Znak - oznacza, że sygnał dla danej architektury nie występuje.)

Wpisy w kolumnie "Akcja" tabeli określają domyślną akcję dla danego sygnału, jako jedną z następujących:

Domyślną akcją jest przerwanie procesu.
Domyślną akcją jest zignorowanie sygnału.
Domyślną akcją jest przerwanie procesu i zapisanie obrazu pamięci (core).
Domyślną akcją jest zatrzymanie procesu.

Najpierw sygnały opisane w pierwotnym standardzie POSIX.1.

Sygnał Wartość Akcja Komentarz
SIGHUP  1 Term Zawieszenie wykryte na terminalu kontrolującym
lub śmierć procesu kontrolującego
SIGINT  2 Term Przerwanie nakazane z klawiatury
SIGQUIT  3 Core Wyjście nakazane z klawiatury
SIGILL  4 Core Nielegalna instrukcja
SIGABRT  6 Core Sygnał abort od abort(3)
SIGFPE  8 Core Wyjątek zmiennoprzecinkowy
SIGKILL  9 Term Sygnał Kill
SIGSEGV 11 Core Nieprawidłowa referencja pamięciowa
SIGPIPE 13 Term Uszkodzony potok: zapis do potoku bez odbiorców
SIGALRM 14 Term Sygnał timera od alarm(1)
SIGTERM 15 Term Sygnał zakończenia pracy
SIGUSR1 30,10,16 Term Sygnał 1 użytkownika
SIGUSR2 31,12,17 Term Sygnał 2 użytkownika
SIGCHLD 20,17,18 Ign Potomek zatrzymał się, lub zakończył pracę
SIGCONT 19,18,25 Kontynuuj, jeśli zatrzymał się
SIGSTOP 17,19,23 Stop Zatrzymaj proces
SIGTSTP 18,20,24 Stop Zatrzymanie napisane z tty
SIGTTIN 21,21,26 Stop wejście tty dla procesu w tle
SIGTTOU 22,22,27 Stop wyjście tty dla procesu w tle

Sygnałów SIGKILL oraz SIGSTOP nie można przechwycić, zablokować ani zignorować.

Następnie sygnały nie występujące w standardzie POSIX.1, ale opisane w SUSv2 lub w SUSv3 / POSIX 1003.1-2001.

Sygnał Wartość Akcja Komentarz
SIGBUS 10,7,10 Core Błąd szyny (nieprawidłowy dostęp do pamięci)
SIGPOLL Term Zdarzenie odpytywalne (Sys V). Synonim SIGIO
SIGPROF 27,27,29 Term Przeterminowanie zegara profilowego
SIGSYS 12,-,12 Core Niewłaściwy argument funkcji (SVID)
SIGTRAP 5 Core Śledzenie/pułapka kontrolna
SIGURG 16,23,21 Ign Pilny warunek na gnieździe (BSD 4.2)
SIGVTALRM 26,26,28 Term Wirtualny zegar alarmu (BSD 4.2)
SIGXCPU 24,24,30 Core Przekroczone ograniczenie czasu CPU (BSD 4.2)
SIGXFSZ 25,25,31 Core Przekroczone ograniczenie rozmiaru pliku (BSD 4.2)

Do wersji 2.2 Linuksa (włącznie) domyślne zachowanie dla sygnałów SIGSYS, SIGXCPU, SIGXFSZ oraz (na architekturach innych niż SPARC i MIPS) SIGBUS polegało na przerwaniu procesu (bez zrzutu pamięci). (W niektórych innych Uniksach domyślne zachowanie dla SIGXCPU i SIGXFSZ polega na przerwaniu procesu bez zrzutu pamięci.) Linux 2.4 jest zgodny ze wymaganiami standardu POSIX 1003.1-2001 w zakresie przerywania procesu ze zrzutem pamięci.

A teraz różne inne sygnały.

Sygnał Wartość Akcja Komentarz
SIGIOT 6 Core pułapka IOT. Synonim SIGABRT
SIGEMT 7,-,7 Term
SIGSTKFLT -,16,- Term Błąd stosu koprocesora (nieużywany)
SIGIO 23,29,22 Term I/O teraz możliwe (BSD 4.2)
SIGCLD -,-,18 Ign Synonim SIGCHLD
SIGPWR 29,30,19 Term Błąd zasilania (System V)
SIGINFO 29,-,- Synonim SIGPWR
SIGLOST -,-,- Term Utracono blokadę pliku
SIGWINCH 28,28,20 Ign Sygnał zmiany rozmiarów okna (BSD 4.3, Sun)
SIGUNUSED -,31,- Term Nie użyty sygnał (wystąpi SIGSYS)

(Sygnał 29 oznacza SIGINFO / SIGPWR na architekturze alpha, lecz SIGLOST na architekturze sparc.)

SIGEMT nie jest wymieniony w POSIX 1003.1-2001, lecz pomimo to pojawia się w większości innych Uniksów. Domyślną akcją dla tego sygnału jest zazwyczaj przerwanie procesu ze zrzutem pamięci.

SIGPWR (nie wymieniony w POSIX 1003.1-2001) jest zazwyczaj domyślnie ignorowany w tych Uniksach, w których występuje.

SIGIO (nie wymieniony w POSIX 1003.1-2001) jest domyślnie ignorowanyw niektórych innych Uniksach.

Sygnały czasu rzeczywistego

Linux wspiera sygnały czasu rzeczywistego zdefiniowane pierwotnie w rozszerzeniu dla czasu rzeczywistego POSIX.4 (a obecnie zawarte w POSIX 1003.1-2001). Linux wspiera 32 sygnały czasu rzeczywistego, o numerach od (SIGRTMIN) do 63 (SIGRTMAX). (Programy powinny zawsze odwoływać się do sygnałów czasu rzeczywistego używając notacji SIGRTMIN+n, gdyż zakres numerów sygnałów czasu rzeczywistego różni się pomiędzy Uniksami.)

W odróżnieniu od sygnałów standardowych, sygnały czasu rzeczywistego nie posiadają predefiniowanego znaczenia: można wykorzystywać cały zestaw sygnałów czasu rzeczywistego do celów określonych w aplikacji. (Należy jednak zauważyć, że implementacja LinuxThreads korzysta z trzech pierwszych sygnałów czasu rzeczywistego.)

Domyślą akcją na nieobsłużony sygnał czasu rzeczywistego jest przerwanie procesu, który go otrzymał.

Sygnały czasu rzeczywistego są rozpoznawane w następujący sposób:

1.
Można kolejkować wiele egzemplarzy sygnału czasu rzeczywistego. Dla odróżnienia, jeśli w czasie gdy standardowy sygnał jest blokowany zostanie doęczonych wiele egzemplarzy tego sygnału, tylko jeden egzemplarzy trafia do kolejki.
2.
Jeśli sygnał wysłano korzystając z sigqueue(2), można wysłać wraz z tym sygnałem wartość towarzyszącą (całkowitą lub wskaźnik). Jeśli proces otrzymujący ustanawia funkcję obsługi dla tego sygnału za pomocą znacznika SA_SIGACTION funkcji sigaction(2), to otrzymuje towarzyszącą mu daną za pośrednictwem pola si_value struktury siginfo_t przekazanej jako drugi argument funkcji obsługi. Ponadto, pola si_pid oraz si_uid tej struktury mogą służyć do otrzymania PID oraz rzeczywistego ID użytkownika procesu wusyłającego sygnał.
3.
sygnały czasu rzeczywistego są doręczane w zagwarantowanej kolejności. Sygnały czasu rzeczywistego jednego rodzaju są doręczane w takiej kolejności, w jakiej zostały wysłane. Jeśli do procesu zostaną wysłane różne sygnały czasu rzeczywistego, będą one doręczone począwszy od sygnału o najniższym numerze. (Tzn., sygnały o niskich numerach mają najwyższy priorytet.)

POSIX nie określa, które z sygnałów powinny zostać doręczone jako pierwsze w sytuacji, gdy obsłużenia wymagają zarówno sygnały standardowe, jak i sygnały czasu rzeczywistego. Linux, podobnie do innych implementacji, daje w tym przypadku pierwszeństwo sygnałom standardowym.

Zgodnie z POSIX, implementacja powinna zazwalać na kolejkowanie do procesu co najmniej _POSIX_SIGQUEUE_MAX (32) sygnałów czasu rzeczywistego. Jednakże, Linux zamiast określać ogdaniczenie dla procesu, wymusza ograniczenie ogólnosystemowe liczby kolejkowanych do wszystkich procesów sygnałów czasu rzeczywistego. Ograniczenie to możbna zobaczyć a także (przy odpowiednich uprawnieniach) zmienić za pośrednictwem pliku /proc/sys/kernel/rtsig-max. Podobnie, za pośrednictwem pliku /proc/sys/kernel/rtsig-nr można dowiedzieć się ile sygnałów czasu rzeczywistego jest aktualnie w kolejce.

ZGODNE Z

POSIX.1

BŁĘDY

SIGIO i SIGLOST mają tę samą wartość. Ten drugi jest zakomentowany w źródłach kernela, lecz proces tworzenia niektórych aplikacji wciąż zakłada, że sygnał 29 to SIGLOST.

ZOBACZ TAKŻE

kill(1), kill(2), setitimer(2), sigaction(2), signal(2), sigprocmask(2), sigqueue(2)

2002-06-13 Linux 2.4.18