Provided by:
manpages-cs_0.17.20080113-1_all 
JMÉNO
signal - seznam signálů
POPIS
V Linuxu jsou podporovány jak POSIX reliable signály (dále jen
"standardní signály"), tak POSIX real-time signály.
Dispozice signálů
Každý signál má dispozici, která určuje, jak se proces zachová při jeho
přijetí.
Údaje ve sloupci "Akce" níže uvedených tabulek určují výchozí dipozici
každého signálu následujícně:
Term Výchozí akcí je ukončení procesu.
Ign Výchozí akcí je ignorování signálu.
Core Výchozí akcí je ukončení procesu a výpis paměti (core dump) (viz
core(5)).
Stop Výchozí akcí je zastavení procesu.
Cont Výchozí akcí je pokračování procesu, pokud je momentálně
zastavený.
Proces může změnit dispozici signálu pomocí sigaction(2) nebo (méně
přenositelně) signal(2). Pomocí těchto systémových volání může proces
vybrat jedno z následujících chování, které má nastat po přijetí
signálu: provést výchozí akci; ignorovat signál; nebo zachytit signál
pomocí signal handler, programátorem definovanou funkcí, která je
automaticky volána při přijetí signálu.
Dispozice signálu je atribut procesu: v mnohovláknových aplikacích je
dispozice určitého signálu stejná pro všechna vlákna.
Maska signálu a nevyřízené signály
Signál může být blokovn, tj. nebude přijat, dokud nebude odblokován.
V mezidobí mezi vygenerovánim signálu a jeho přijetím je signál tzv.
nevyzen.
Každé vlákno procesu má nezávislou masku signlu, která určuje sadu
signálů, kterou vlákno právě blokuje. Vlákno může manipulovat svou
maskou signálu pomocí pthread_sigmask(3). V klasické jednovláknové
aplikaci může být k manipulaci maskou signálu použito sigprocmask(2).
Signál může být vygenerován (a tedy nevyřízený) pro proces jako celek
(např. posláním pomocí kill(2)) nebo pro určité vlákno (např. některé
signály jako SIGSEGV a SIGFPE, vygenerované jako důsledek spuštění
určité instrukce strojového jazyka, jsou vláknově orientovány, stejně
jako signály zaměřené na určité vlákno pomocí pthread_kill(3)). Signál
zaměřený na vlákno může být doručen jakémukoliv vláknu, které jej právě
neblokuje. Pokud signál neblokuje více vláken, vybere příjemce signálu
jádro.
Vlákno může získat sadu signálů, které jsou momentálně nevyřízené,
pomocí sigpending(2). Tato sada se skládá ze sloučení sady
nevyřízených signálů zaměřených na proces a sady signálů zaměřených na
volající vlákno.
Standardní Signály
Linux podporuje níže uvedené standardní signály. Některá čísla signálů
jsou závislá na architektuře, jak je uvedeno ve sloupci "Hodnota".
(Kde jsou uvedeny tři hodnoty, první obvykle platí pro alpha a sparc,
prostřední pro i386, ppc a sh a poslední pro mips. Znak - znamená, že
signál v odpovídající architektuře chybí.)
Nejprve jsou uvedeny signály popsané v normě POSIX.1-1990.
Signál Hodnota Akce Poznámka
--------------------------------------------------------------------------
SIGHUP 1 Term "Hangup" - při zavěšení na řídícím terminálu
nebo ukončení řídícího procesu.
SIGINT 2 Term "Interrupt" - přerušení z klávesnice.
SIGQUIT 3 Core "Quit" - ukončení z klávesnice.
SIGILL 4 Core "Illegal Instruction" - neplatná instrukce.
SIGABRT 6 Core "Abort" - ukončení funkcí abort(3)
SIGFPE 8 Core "Floating point exception" - přetečení
v pohyblivé řádové čárce.
SIGKILL 9 Term "Kill" - signál pro nepodmíněné ukončení
procesu.
SIGSEGV 11 Core Odkaz na nepřípustnou adresu v paměti.
SIGPIPE 13 Term "Broken pipe" - pokus o zápis do roury,
kterou nemá žádný proces otevřenou pro čtení.
SIGALRM 14 Term Signál od časovače, nastaveného funkcí
alarm(1)
SIGTERM 15 Term "Termination" - signál ukončení
SIGUSR1 30,10,16 Term Signál 1 definovaný uživatelem
SIGUSR2 31,12,17 Term Signál 2 definovaný uživatelem
SIGCHLD 20,17,18 Ign Zastavení nebo ukončení dětského procesu
SIGCONT 19,18,25 Cont Pokračování po zastavení
SIGSTOP 17,19,23 Stop Zastavení procesu
SIGTSTP 18,20,24 Stop Zastavení znakem "Stop" z terminálu
SIGTTIN 21,21,26 Stop čtení z terminálu v procesu běžícím na pozadí
SIGTTOU 22,22,27 Stop zápis na terminál v procesu běžícím na pozadí
Signály SIGKILL a SIGSTOP nemohou být zachyceny, blokovány ani
ignorovány.
Následují signály na rámec standardu POSIX.1-1990, které jsou popsány v
SUSv2 a POSIX.1-2001.
Signál Hodnota Akce Poznámka
---------------------------------------------------------------------------------
SIGBUS 10,7,10 Core "Bus error" - pokus o přístup mimo mapovanou paměť
SIGPOLL Term Pollable event (Sys V). Synonymum SIGIO
SIGPROF 27,27,29 Term Časovač používaný při profilování
SIGSYS 12,-,12 Core Nepřípustný parametr syst. volání (SVr4)
SIGTRAP 5 Core Přerušení při ladění (trasování,breakpoint)
SIGURG 16,23,21 Ign Soket přijal data s příznakem Urgent (4.2 BSD)
SIGVTALRM 26,26,28 Term Virtuální časovač (4.2 BSD)
SIGXCPU 24,24,30 Core Překročen limit času CPU (4.2 BSD)
SIGXFSZ 25,25,31 Core Překročen limit velikosti souboru (4.2 BSD)
Až po Linux 2.2 včetně bylo výchozí chování pro SIGSYS, SIGXCPU,
SIGXFSZ, a (na architekturách jiných než SPARC a MIPS) SIGBUS ukončit
proces (bez core dump). (Na některých jiných Unixových systémech bylo
výchozí akcí pro SIGXCPU a SIGXFSZ ukončení procesu bez core dump.)
Linux 2.4 splňuje požadavky POSIX.1-2001 pro tyto signály, ukončuje
procesy s core dump.
Další různé signály.
Signál Hodnota Akce Poznámka
-------------------------------------------------------------------------
SIGIOT 6 Core IOT - synonymum signálu SIGABRT
SIGEMT 7,-,7 Term
SIGSTKFLT -,16,- Term Chyba zásobníku koprocesoru (nepoužívá se)
SIGIO 23,29,22 Term Lze pokračovat ve vstupu/výstupu (4.2 BSD)
SIGCLD -,-,18 Ign Synonymum SIGCHLD
SIGPWR 29,30,19 Term Výpadek napájení (Systém V)
SIGINFO 29,-,- Synonymum SIGPWR
SIGLOST -,-,- Term Zámek souboru byl ztracen
SIGWINCH 28,28,20 Ign Změna velikosti okna (4.3 BSD, Sun)
SIGUNUSED -,31,- Term Nepoužívaný signál (bude SIGSYS)
Signál č. 29 na procesorech Alpha znamená SIGINFO / SIGPWE, ale na
Sparcu SIGLOST.)
SIGEMT není specifikován v POSIX.1-2001, ale stejně je přítomen na
většině ostatních Unixových systémů, kde je výchozí akcí obvykle
ukončení procesu s core dump.
SIGPWR (není specifikován v POSIX.1-2001) na většině ostatních
Unixových systémů, kde se objevuje, je obvykle ignorován.
SIGIO (není specifikován v POSIX.1-2001) na některých dalších Unixech
je jako výchozí ignorován.
Real-time signály
Linux podporuje real-time signály tak, jak jsou definovány v POSIX.1b
real-time extensions (a nyní zahrnuty v POSIX.1-2001). Rozsah
podporovaných real-time signálů je definován makry SIGRTMIN a SIGRTMAX.
POSIX.1-2001 vyžaduje, aby implementace podporovale alespoň
_POSIX_RTSIG_MAX (8) real-time signálů.
Linux podporuje 32 různých real-time signálů očíslovaných 33 až 64.
Nicméně implementace POSIX threads v glibc používá interně dva (pro
NPTL) nebo tři (pro LinuxThreads) real-time signály (viz pthreads(7)),
a podle toho upravuje hodnotu SIGRTMIN (na 34 nebo 35). protože rozsah
dostupných real-time signálů se liší v závislosti na implementaci
vláken v glibc (může se měnit za běhu v závislosti na jádře a glibc) a
navíc rozsah real-time signálů se mezi Unixovými systémy liší, programy
by nikdy nemly odkazovat na real-time signly pevn danmi sly,
místo toho by měly používat notaci SIGRTMIN+n, a za běhu kontrolovat,
zda SIGRTMIN+n nepřesahuje SIGRTMAX.
Na rozdíl od standardních signálů nemají real-time signály stanovený
význam: Celá sada real-time signálů může být použita pro účely
definované aplikací. (Nicméně pozor, první tři real-time signály
používá implementace LinuxThreads.)
Výchozí akcí pro nezpracovaný real-time signál je ukončení procesu,
který jej přijal.
Real-time signály se liší následujícně:
1. Vícero instancí real-time signálů může být zařazeno do fronty.
Naopak pokud je doručeno vícero instancí standardního signálu,
zatímco je signál blokován, je do fronty zařazen jen jeden.
2. Pokud je signál poslán pomocí sigqueue(2), může s ním být poslána
doprovodná hodnota (integer nebo pointer). Pokud přijímací proces
vytvoří pro tento signál handler pomocí vlajky SA_SIGINFO pro
sigaction(2), tak může tato data získat v poli si_value struktury
siginfo_t předané jako druhý argument handleru. Navíc mohou být
pole si_pid a si_uid této struktury použita k získání PID a real
user ID procesu, který signál poslal.
3. Real-time signály jsou doručeny v zaručeném pořadí. Vícero real-
time signálů stejného typu je doručeno v pořadí, v jakém byly
vyslány. Pokud jsou procesu poslány různé real-time signály, jsou
doručeny v pořadí podle čísla, začínajíc nejnižším. (tj. signály s
nízkým číslem mají vyšší prioritu)
Pokud má proces nevyřízené zároveň real-time a standardní signály,
POSIX neurčuje, které mají být doručeny jako první. Linux, stejně jako
mnoho jiných implementací, v takovém případě upřednostňí standardní
signály.
Podle POSIX by měla implementace pro frontu procesu povolit alespoň
_POSIX_SIGQUEUE_MAX (32) real-time signálů. Linux ale pracuje jinak.
V jádrech do 2.6.7 včetně stanovuje Linux celosystémový limit na počet
real-time signálů ve frontách všech procesů. tento limit je možné
zjistit a (s patřičnými právy) změnit přes soubor
/proc/sys/kernel/rtsig-max. Další soubor, /proc/sys/kernel/rtsig-nr,
může být použit ke zjištění, kolik real-time signálů je momentálně ve
frontách. V Linuxu 2.6.8 byla tato /proc rozhraní nahrazena limitem
zdrojů RLIMIT_SIGPENDING, který určuje uživatelský limit na počet
signálů ve frontách; více viz setrlimit(2).
Async-signal-safe functions
Rutina zpracovávající signál, kterou vytvořil sigaction(2) nebo
signal(2), musí být velmi opatrná, neboť její zpracování může být v
určitých místech programu přerušeno. POSIX má koncept "bezpečné
funkce". Pokud signál přeruší vykonávání ne-bezpečné funkce a handler
zavolá ne-bezpečnou funkci, potom je chování programu nedefinováno.
POSIX.1-2003 vyžaduje, aby implementace zaručovala bezpečné volání
následujících funkcí v rámci "signal handleru":
_Exit()
_exit()
abort()
accept()
access()
aio_error()
aio_return()
aio_suspend()
alarm()
bind()
cfgetispeed()
cfgetospeed()
cfsetispeed()
cfsetospeed()
chdir()
chmod()
chown()
clock_gettime()
close()
connect()
creat()
dup()
dup2()
execle()
execve()
fchmod()
fchown()
fcntl()
fdatasync()
fork()
fpathconf()
fstat()
fsync()
ftruncate()
getegid()
geteuid()
getgid()
getgroups()
getpeername()
getpgrp()
getpid()
getppid()
getsockname()
getsockopt()
getuid()
kill()
link()
listen()
lseek()
lstat()
mkdir()
mkfifo()
open()
pathconf()
pause()
pipe()
poll()
posix_trace_event()
pselect()
raise()
read()
readlink()
recv()
recvfrom()
recvmsg()
rename()
rmdir()
select()
sem_post()
send()
sendmsg()
sendto()
setgid()
setpgid()
setsid()
setsockopt()
setuid()
shutdown()
sigaction()
sigaddset()
sigdelset()
sigemptyset()
sigfillset()
sigismember()
signal()
sigpause()
sigpending()
sigprocmask()
sigqueue()
sigset()
sigsuspend()
sleep()
socket()
socketpair()
stat()
symlink()
sysconf()
tcdrain()
tcflow()
tcflush()
tcgetattr()
tcgetpgrp()
tcsendbreak()
tcsetattr()
tcsetpgrp()
time()
timer_getoverrun()
timer_gettime()
timer_settime()
times()
umask()
uname()
unlink()
utime()
wait()
waitpid()
write()
POZNÁMKA K PŘEKLADU
U často se vyskytujících signálů byly ponechány ve sloupci "Poznámka" i
původní termíny. Snáze se pak z hlášení shellu o ukončení procesu
lokalizuje, kterým signálem byl proces přerušen.
SPLŇUJE STANDARDY
POSIX.1
CHYBY
Signály SIGIO a SIGLOST mají stejnou hodnotu. SIGLOST se ve zdrojových
textech jádra již nepoužívá, ale při překladu určitých balíků software
se stále předpokládá, že signál č.29 znamená SIGLOST.
DALŠÍ INFORMACE
kill(1), kill(2), killpg(2), setitimer(2), setrlimit(2), sgetmask(2),
sigaction(2), signal(2), sigpending(2), sigprocmask(2), sigqueue(2),
sigsuspend(2), sigwaitinfo(2), bsd_signal(3), raise(3), sigvec(3), sig-
set(3), strsignal(3), sysv_signal(3), core(5), proc(5), pthreads(7)
TIRÁŽ
Tato stránka je součástí projektu Linux man-pages. Popis projektu a
informace o hlášení chyb najdete na http://www.kernel.org/doc/man-
pages/.