Rechercher une page de manuel
signal
Langue: pl
Version: 2002\-06\-13 (ubuntu - 16/08/07)
Section: 7 (Divers)
Sommaire
NAZWA
signal - lista dostêpnych sygna³ówOPIS
Linux wspiera zarówno rzeczywiste sygna³y POSIX-owe (zwane dalej "sygna³ami standardowymi"), jak i sygna³y POSIX-owe czasu rzeczywistego.Zachowania sygna³u
Ka¿dy sygna³ ma przypisane bie¿±ce zachowanie, które okre¶la reakcjê procesu na dostarczony sygna³.Wpisy w kolumnie "Akcja" tabeli okre¶laj± domy¶lne zachowanie dla danego sygna³u, jako jedno z nastêpuj±cych:
- Term
- Domy¶ln± akcj± jest przerwanie procesu.
- Ign
- Domy¶ln± akcj± jest zignorowanie sygna³u.
- Core
- Domy¶ln± akcj± jest przerwanie procesu i zapisanie obrazu pamiêci (patrz core(5)).
- Stop
- Domy¶ln± akcj± jest zatrzymanie procesu.
- Cont
- Domy¶ln± akcj± jest kontynuowanie procesu, je¿eli jest obecnie zatrzymany.
Proces mo¿e zmieniæ zachowanie siê sygna³u, u¿ywaj±c sigaction(2) lub (mniej przeno¶nego) signal(2). U¿ywaj±c tych wywo³añ systemowych, proces mo¿e wybraæ jedn± z poni¿szych reakcji na dostarczenie sygna³u: wykonaæ domy¶ln± akcjê, zignorowaæ sygna³, przej±æ sygna³ wykonuj±c akcjê obs³ugi sygna³u, czyli podan± przez programistê funkcjê, wywo³ywan± automatycznie po dostarczeniu sygna³u.
Zachowanie sygna³u jest atrybutem poszczególnych procesów: w aplikacji wielow±tkowej zachowanie danego sygna³u jest takie samo dla wszystkich w±tków.
Maska sygna³u i sygna³y oczekuj±ce
Sygna³ mo¿e byæ zablokowany, co oznacza, ¿e nie zostanie dostarczony, dopóki siê go nie odblokuje. Sygna³ jest nazywany oczekuj±cym, je¿eli zosta³ ju¿ wygenerowany, ale nie zosta³ jeszcze dostarczony.Ka¿dy w±tek procesu ma swoj± niezale¿n± maskê sygna³ów, okre¶laj±c± zbiór sygna³ów obecnie blokowanych przez w±tek. W±tek mo¿e zmieniaæ maskê sygna³ów, u¿ywaj±c pthread_sigmask(3). Tradycyjna, jednow±tkowa aplikacja mo¿e do tego celu u¿yæ sigprocmask(2).
Sygna³ mo¿e byæ wygenerowany (i w zwi±zku z tym oczekuj±cy) dla procesu jako ca³o¶ci (np. wys³any za pomoc± kill(2)) lub dla okre¶lonego w±tku (np. skierowane do w±tku s± niektóre sygna³y, takie jak SIGSEGV lub SIGPFPE, generowane w konsekwencji u¿ycia okre¶lonej instrukcji jêzyka maszynowego oraz sygna³y wys³ane za pomoc± pthread_kill(2)). Sygna³ skierowany do procesu mo¿e byæ dostarczony do któregokolwiek z jego w±tków, który nie blokuje tego sygna³u. Je¿eli wiêcej ni¿ jeden w±tek nie blokuje sygna³u, to j±dro dostarczy sygna³ do przypadkowo wybranego w±tku.
W±tek mo¿e pobraæ zbiór obecnie oczekuj±cych sygna³ów, u¿ywaj±c sigpending(2). Zbiór ten bêdzie zawiera³ sygna³y oczekuj±ce skierowane zarówno do ca³ego procesu, jak i do wywo³uj±cego w±tku.
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.)Najpierw sygna³y opisane w pierwotnym standardzie POSIX.1.
| Sygna³ | Warto¶æ | Akcja | Komentarz |
| | | | |
| 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(2) |
| 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 | Cont | Kontynuuj, je¶li siê zatrzyma³ |
| 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 |
| | | | |
| 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 |
| | | | |
| 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 ignorowany w 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 32 (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 dorê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 wysy³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 zezwalaæ na kolejkowanie do procesu co najmniej _POSIX_SIGQUEUE_MAX (32) sygna³ów czasu rzeczywistego. Jednak¿e, Linux zamiast okre¶laæ ograniczenie dla procesu, wymusza ograniczenie ogólnosystemowe liczby kolejkowanych do wszystkich procesów sygna³ów czasu rzeczywistego. Ograniczenie to mo¿na 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. W Linuksie 2.6.8 ten interfejs /proc zosta³ zast±piony limitem zasobów RLIMIT_SIGPENDING, który okre¶la limit kolejkowanych sygna³ów dla poszczególnych u¿ytkowników; patrz setrlimit(2) w celu uzyskania dalszych informacji.
ZGODNE Z
POSIX.1B£ÊDY
SIGIO i SIGLOST maj± tê sam± warto¶æ. Ten drugi jest zakomentowany w ¼ród³ach j±dra, lecz proces tworzenia niektórych aplikacji wci±¿ zak³ada, ¿e sygna³ 29 to SIGLOST.ZOBACZ TAK¯E
kill(1), kill(2), killpg(2), setitimer(2), setrlimit(2), sigaction(2), signal(2), sigpending(2), sigprocmask(2), sigqueue(2), sigsuspend(2), sigwaitinfo(2), raise(3), sigvec(3), sigset(3), strsignal(3), core(5), proc(5), pthreads(7)exporting vfat doesn't survive a server crash"
-+- Linus in Guide du linuxien pervers - "Who cares ?" -+-
Contenus ©2006-2008 Benjamin Poulain
Design ©2006-2008 Maxime Vantorre