Provided by:
manpages-cs_0.18.20090209-3_all 
JM'ENO
signal - pehled signal
POPIS
V Linuxu jsou podporovany jak POSIX reliable signaly (dale jen
"standardni signaly"), tak POSIX real-time signaly.
Dispozice sign'al
Kady signal ma dispozici, ktera uruje, jak se proces zachova pi jeho
pijeti.
Udaje ve sloupci "Akce" nie uvedenych tabulek uruji vychozi dipozici
kadeho signalu nasledujicn:
Term Vychozi akci je ukoneni procesu.
Ign Vychozi akci je ignorovani signalu.
Core Vychozi akci je ukoneni procesu a vypis pamti (core dump) (viz
core(5)).
Stop Vychozi akci je zastaveni procesu.
Cont Vychozi akci je pokraovani procesu, pokud je momentaln
zastaveny.
Proces me zmnit dispozici signalu pomoci sigaction(2) nebo (men
penositeln) signal(2). Pomoci tchto systemovych volani me proces
vybrat jedno z nasledujicich chovani, ktere ma nastat po pijeti
signalu: provest vychozi akci; ignorovat signal; nebo zachytit signal
pomoci signal handleru, programatorem definovanou funkci, ktera je
automaticky volana pi pijeti signalu. (By default, the signal handler
is invoked on the normal process stack. It is possible to arrange that
the signal handler uses an alternate stack; see sigaltstack(2) for a
discussion of how to do this and when it might be useful.)
Dispozice signalu je atribut procesu: v mnohovlaknovych aplikacich je
dispozice uriteho signalu stejna pro vechna vlakna.
A child created via fork(2) inherits a copy of its parent's signal
dispositions. During an execve(2), the dispositions of handled signals
are reset to the default; the dispositions of ignored signals are left
unchanged.
Posl'an'i sign'alu
The following system calls and library functions allow the caller to
send a signal:
raise(3) Sends a signal to the calling thread.
kill(2) Sends a signal to a specified process, to all members
of a specified process group, or to all processes on
the system.
killpg(2) Sends a signal to all of the members of a specified
process group.
pthread_kill(3) Sends a signal to a specified POSIX thread in the same
process as the caller.
tgkill(2) Sends a signal to a specified thread within a specific
process. (This is the system call used to implement
pthread_kill(3).)
sigqueue(2) Sends a real-time signal with accompanying data to a
specified process.
Waiting for a Signal to be Caught
The following system calls suspend execution of the calling process or
thread until a signal is caught (or an unhandled signal terminates the
process):
pause(2) Suspends execution until any signal is caught.
sigsuspend(2) Temporarily changes the signal mask (see below) and
suspends execution until one of the unmasked signals is
caught.
Synchronously Accepting a Signal
Rather than asynchronously catching a signal via a signal handler, it
is possible to synchronously accept the signal, that is, to block
execution until the signal is delivered, at which point the kernel
returns information about the signal to the caller. There are two
general ways to do this:
* sigwaitinfo(2), sigtimedwait(2), and sigwait(3) suspend execution
until one of the signals in a specified set is delivered. Each of
these calls returns information about the delivered signal.
* signalfd(2) returns a file descriptor that can be used to read
information about signals that are delivered to the caller. Each
read(2) from this file descriptor blocks until one of the signals in
the set specified in the signalfd(2) call is delivered to the
caller. The buffer returned by read(2) contains a structure
describing the signal.
Maska sign'alu a nevy'izen'e sign'aly
Signal me byt blokov'an, tj. nebude pijat, dokud nebude odblokovan. V
mezidobi mezi vygenerovanim signalu a jeho pijetim je signal tzv.
nevy'izen'y.
Kade vlakno procesu ma nezavislou masku sign'alu, ktera uruje sadu
signal, kterou vlakno prav blokuje. Vlakno me manipulovat svou maskou
signalu pomoci pthread_sigmask(3). V klasicke jednovlaknove aplikaci
me byt k manipulaci maskou signalu pouito sigprocmask(2).
A child created via fork(2) inherits a copy of its parent's signal
mask; the signal mask is preserved across execve(2).
Signal me byt vygenerovan (a tedy nevyizeny) pro proces jako celek
(nap. poslanim pomoci kill(2)) nebo pro urite vlakno (nap. nktere
signaly jako SIGSEGV a SIGFPE, vygenerovane jako dsledek sputni urite
instrukce strojoveho jazyka, jsou vlaknov orientovany, stejn jako
signaly zamene na urite vlakno pomoci pthread_kill(3)). Signal zameny
na vlakno me byt doruen jakemukoliv vlaknu, ktere jej prav neblokuje.
Pokud signal neblokuje vice vlaken, vybere pijemce signalu jadro.
Vlakno me ziskat sadu signal, ktere jsou momentaln nevyizene, pomoci
sigpending(2). Tato sada se sklada ze sloueni sady nevyizenych signal
zamenych na proces a sady signal zamenych na volajici vlakno.
A child created via fork(2) initially has an empty pending signal set;
the pending signal set is preserved across an execve(2).
Standardn'i Sign'aly
Linux podporuje nie uvedene standardni signaly. Nktera isla signal jsou
zavisla na architektue, jak je uvedeno ve sloupci "Hodnota". (Kde jsou
uvedeny ti hodnoty, prvni obvykle plati pro alpha a sparc, prostedni
pro i386, ppc a sh a posledni pro mips. Znak - znamena, e signal v
odpovidajici architektue chybi.)
Nejprve jsou uvedeny signaly popsane v norm POSIX.1-1990.
Signal HodnotaAkcePoznamka
-------------------------------------------------------------------------------------
SIGHUP 1Term"Hangup" - pi zaven'i na 'id'ic'im termin'alu
nebo ukonen'i 'id'ic'iho procesu.
SIGINT 2Term"Interrupt" - peruen'i z kl'avesnice.
SIGQUIT 3Core"Quit" - ukonen'i z kl'avesnice.
SIGILL 4Core"Illegal Instruction" - neplatn'a instrukce.
SIGABRT 6Core"Abort" - ukonen'i funkc'i abort(3)
SIGFPE 8Core"Floating point exception" - peteen'i v pohybliv'e 'adov'e 'arce.
SIGKILL 9Term"Kill" - sign'al pro nepodm'inn'e ukonen'i procesu.
SIGSEGV 11CoreOdkaz na nep'ipustnou adresu v pamti.
SIGPIPE 13Term"Broken pipe" - pokus o z'apis do roury,
kterou nem'a 'adn'y proces otevenou pro ten'i.
SIGALRM 14TermSign'al od asovae, nastaven'eho funkc'i alarm(1)
SIGTERM 15Term"Termination" - sign'al ukonen'i
SIGUSR1 30,10,16TermSign'al 1 definovan'y uivatelem
SIGUSR2 31,12,17TermSign'al 2 definovan'y uivatelem
SIGCHLD 20,17,18IgnZastaven'i nebo ukonen'i dtsk'eho procesu
SIGCONT 19,18,25ContPokraov'an'i po zastaven'i
SIGSTOP 17,19,23StopZastaven'i procesu
SIGTSTP 18,20,24StopZastaven'i znakem "Stop" z termin'alu
SIGTTIN 21,21,26Stopten'i z termin'alu v procesu b'ic'im na pozad'i
SIGTTOU 22,22,27Stopz'apis na termin'al v procesu b'ic'im na pozad'i
Signaly SIGKILL a SIGSTOP nemohou byt zachyceny, blokovany ani
ignorovany.
Nasleduji signaly nad ramec standardu POSIX.1-1990, ktere jsou popsany
v SUSv2 a POSIX.1-2001.
Signal HodnotaAkcePoznamka
-----------------------------------------------------------------------------
SIGBUS 10,7,10Core"Bus error" - pokus o p'istup mimo mapovanou pam
SIGPOLL TermPollable event (Sys V).
Synonymum SIGIO
SIGPROF 27,27,29Termasova pou'ivan'y pi profilov'an'i
SIGSYS 12,-,12CoreNep'ipustn'y parametr syst. vol'an'i (SVr4)
SIGTRAP 5CorePeruen'i pi ladn'i (trasov'an'i,breakpoint)
SIGURG 16,23,21IgnSoket pijal data s p'iznakem Urgent (4.2 BSD)
SIGVTALRM 26,26,28TermVirtu'aln'i asova (4.2 BSD)
SIGXCPU 24,24,30CorePekroen limit asu CPU (4.2 BSD)
SIGXFSZ 25,25,31CorePekroen limit velikosti souboru (4.2 BSD)
A po Linux 2.2 vetn bylo vychozi chovani pro SIGSYS, SIGXCPU, SIGXFSZ,
a (na architekturach jinych ne SPARC a MIPS) SIGBUS ukonit proces (bez
core dump). (Na nkterych jinych Unixovych systemech bylo vychozi akci
pro SIGXCPU a SIGXFSZ ukoneni procesu bez core dump.) Linux 2.4 spluje
poadavky POSIX.1-2001 pro tyto signaly, ukonuje procesy s core dump.
Dali rzne signaly.
Signal HodnotaAkcePoznamka
-------------------------------------------------------------------------
SIGIOT 6CoreIOT - synonymum sign'alu SIGABRT
SIGEMT 7,-,7Term
SIGSTKFLT -,16,-TermChyba z'asobn'iku koprocesoru (nepou'iv'a se)
SIGIO 23,29,22TermLze pokraovat ve vstupu/v'ystupu (4.2 BSD)
SIGCLD -,-,18IgnSynonymum SIGCHLD
SIGPWR 29,30,19TermV'ypadek nap'ajen'i (Syst'em V)
SIGINFO 29,-,-Synonymum SIGPWR
SIGLOST -,-,-TermZ'amek souboru byl ztracen
SIGWINCH 28,28,20IgnZmna velikosti okna (4.3 BSD, Sun)
SIGUNUSED -,31,-TermNepou'ivan'y sign'al (bude SIGSYS)
Signal . 29 na procesorech Alpha znamena SIGINFO / SIGPWE, ale na
Sparcu SIGLOST.)
SIGEMT neni specifikovan v POSIX.1-2001, ale stejn je pitomen na vtin
ostatnich Unixovych system, kde je vychozi akci obvykle ukoneni procesu
s core dump.
SIGPWR (neni specifikovan v POSIX.1-2001) na vtin ostatnich Unixovych
system, kde se objevuje, je obvykle ignorovan.
SIGIO (neni specifikovan v POSIX.1-2001) na nkterych dalich Unixech je
jako vychozi ignorovan.
Real-time sign'aly
Linux podporuje real-time signaly tak, jak jsou definovany v POSIX.1b
real-time extensions (a nyni zahrnuty v POSIX.1-2001). Rozsah
podporovanych real-time signal je definovan makry SIGRTMIN a SIGRTMAX.
POSIX.1-2001 vyaduje, aby implementace podporovale alespo
_POSIX_RTSIG_MAX (8) real-time signal.
Linux podporuje 32 rznych real-time signal oislovanych 33 a 64. Nicmen
implementace POSIX threads v glibc pouiva intern dva (pro NPTL) nebo ti
(pro LinuxThreads) real-time signaly (viz pthreads(7)), a podle toho
upravuje hodnotu SIGRTMIN (na 34 nebo 35). protoe rozsah dostupnych
real-time signal se lii v zavislosti na implementaci vlaken v glibc (me
se mnit za bhu v zavislosti na jade a glibc) a navic rozsah real-time
signal se mezi Unixovymi systemy lii, programy by nikdy nemly odkazovat
na real-time sign'aly pevn dan'ymi 'isly, misto toho by mly pouivat notaci
SIGRTMIN+n, a za bhu kontrolovat, zda SIGRTMIN+n nepesahuje SIGRTMAX.
Na rozdil od standardnich signal nemaji real-time signaly stanoveny
vyznam: Cela sada real-time signal me byt pouita pro uely definovane
aplikaci. (Nicmen pozor, prvni ti real-time signaly pouiva
implementace LinuxThreads.)
Vychozi akci pro nezpracovany real-time signal je ukoneni procesu,
ktery jej pijal.
Real-time signaly se lii nasledujicn:
1. Vicero instanci real-time signal me byt zaazeno do fronty. Naopak
pokud je dorueno vicero instanci standardniho signalu, zatimco je
signal blokovan, je do fronty zaazen jen jeden.
2. Pokud je signal poslan pomoci sigqueue(2), me s nim byt poslana
doprovodna hodnota (integer nebo pointer). Pokud pijimaci proces
vytvoi pro tento signal handler pomoci vlajky SA_SIGINFO pro
sigaction(2), tak me tato data ziskat v poli si_value struktury
siginfo_t pedane jako druhy argument handleru. Navic mohou byt
pole si_pid a si_uid teto struktury pouita k ziskani PID a real
user ID procesu, ktery signal poslal.
3. Real-time signaly jsou dorueny v zaruenem poadi. Vicero real-time
signal stejneho typu je dorueno v poadi, v jakem byly vyslany.
Pokud jsou procesu poslany rzne real-time signaly, jsou dorueny v
poadi podle isla, zainajic nejniim (tj. signaly s nizkym islem maji
vyi prioritu). Naopak, pokud na proces eka vicero standardnich
signal, neni poadi jejich dorueni definovano.
Pokud ma proces nevyizene zarove real-time a standardni signaly, POSIX
neuruje, ktere maji byt dorueny jako prvni. Linux, stejn jako mnoho
jinych implementaci, v takovem pipad upednosti standardni signaly.
Podle POSIX by mla implementace pro frontu procesu povolit alespo
_POSIX_SIGQUEUE_MAX (32) real-time signal. Linux ale pracuje jinak. V
jadrech do 2.6.7 vetn stanovuje Linux celosystemovy limit na poet
real-time signal ve frontach vech proces. tento limit je mone zjistit
a (s patinymi pravy) zmnit pes soubor /proc/sys/kernel/rtsig-max. Dali
soubor, /proc/sys/kernel/rtsig-nr, me byt pouit ke zjitni, kolik
real-time signal je momentaln ve frontach. V Linuxu 2.6.8 byla tato
/proc rozhrani nahrazena limitem zdroj RLIMIT_SIGPENDING, ktery uruje
uivatelsky limit na poet signal ve frontach; vice viz setrlimit(2).
Async-signal-safe functions
Rutina zpracovavajici signal, kterou vytvoil sigaction(2) nebo
signal(2), musi byt velmi opatrna, nebo jeji zpracovani me byt v
uritych mistech programu perueno. POSIX ma koncept "bezpene funkce".
Pokud signal perui vykonavani ne-bezpene funkce a handler zavola
ne-bezpenou funkci, potom je chovani programu nedefinovano.
POSIX.1-2004 (take znamy jako POSIX.1-2001 Technical Corrigendum 2)
vyaduje, aby implementace zaruovala bezpene volani nasledujicich funkci
v ramci "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()
sockatmark()
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()
POSIX.1-2008 odstrauje fpathconf(), pathconf() a sysconf() z uvedeneho
seznamu a pidava nasledujici funkce:
execl()
execv()
faccessat()
fchmodat()
fchownat()
fexecve()
fstatat()
futimens()
linkat()
mkdirat()
mkfifoat()
mknod()
mknodat()
openat()
readlinkat()
renameat()
symlinkat()
unlinkat()
utimensat()
utimes()
Peruen'i syst'emov'ych vol'an'i a funkc'i knihoven prostednictv'im "signal
handlers"
Pokud je signal handler vyvolan v okamiku, kdy je systemove volani nebo
funkce knihovny blokovana, pak:
* je volani automaticky restartovano po navratu signal handleru, nebo
* volani sele s chybou EINTR.
Ktera z tchto monosti nastane, zalei na rozhrani a na tom, zda byl
signal handler definovan s pomoci vlajky SA_RESTART (viz sigaction(2)).
Podrobnosti se mezi Unixovymi systemy lii; dale jsou uvedeny pro Linux.
Pokud je blokovane volani pro jedno z nasledujicich rozhrani perueno
signal handlerem a byla pouita vlajka SA_RESTART, je volani automaticky
restartovano po navratu signal handleru. V opanem pipad volani sele s
chybou EINTR:
* Volani read(2), readv(2), write(2), writev(2) a ioctl(2) na
"pomalych" zaizenich. "Pomale" zaizeni je takove, kde I/O volani
me blokovat nekonen dlouho - napiklad terminal, roura nebo
socket. (Podle teto definice neni disk pomalym zaizenim) Pokud je
I/O volani perueno signal handlerem v okamiku, kdy ji peneslo
njaka data, je navratovou hodnotou volani uspch (obvykle poet
penesenych bajt).
* open(2), v pipad, e me blokovat (nap. pi otevirani FIFO; viz
fifo(7)).
* wait(2), wait3(2), wait4(2), waitid(2) a waitpid(2).
* Rozhrani socket: accept(2), connect(2), recv(2), recvfrom(2),
recvmsg(2), send(2), sendto(2) a sendmsg(2); neplati v pipad, e
byl pro socket nastaven asovy limit (viz nie).
* Rozhrani souborovych zamk: flock(2) a fcntl(2) F_SETLKW.
* Rozhrani pro POSIXove fronty zprav: mq_receive(3),
mq_timedreceive(3), mq_send(3) a mq_timedsend(3).
* futex(2) FUTEX_WAIT (od jadra 2.6.22; pedtim vdycky selhalo s
EINTR).
* Rozhrani POSIXovych semafor: sem_wait(3) a sem_timedwait(3) (od
jadra 2.6.22; pedtim vdycky selhalo s EINTR).
Nasledujici rozhrani se po perueni signal handlerem nikdy nerestartuji,
bez ohledu na pouiti SA_RESTART - vdycky selou s chybou EINTR:
* Rozhrani socket v pipad, e byl pro socket nastaven asovy limit
pomoci setsockopt(2): accept(2), recv(2), recvfrom(2) a
recvmsg(2) - pokud byl nastaven asovy limit pro pijeti
(SO_RCVTIMEO); connect(2), send(2), sendto(2) a sendmsg(2) -
pokud byl nastaven asovy limit pro odeslani (SO_SNDTIMEO).
* Rozhrani pouivana k ekani na signaly: pause(2), sigsuspend(2),
sigtimedwait(2) a sigwaitinfo(2).
* Multiplexujici rozhrani popisova soubor: epoll_wait(2),
epoll_pwait(2), poll(2), ppoll(2), select(2) a pselect(2).
* System V IPC rozhrani: msgrcv(2), msgsnd(2), semop(2) a
semtimedop(2).
* Rozhrani pro spanek: clock_nanosleep(2), nanosleep(2) a
usleep(3).
* read(2) z popisovae soubor inotify(7).
* io_getevents(2).
Funkce sleep(3) se take pi perueni signal handlerem nerestartuje, nybr
vrati uspch: poet sekund, ktere zbyvaji ke spani.
Peruen'i syst'emov'ach vol'an'i a funkc'i knihoven sign'aly Stop
V Linuxu mohou nktera blokujici rozhrani selhat s chybou EINTR i bez
signal handler, pokud je proces zastaven jednim ze stop signal a pote
obnoven pomoci SIGCONT. Toto chovani neodporuje POSIX.1 a neobjevuje se
v jinych systemech.
Linuxova rozhrani, v nich se toto chovani projevuje, jsou:
* Rozhrani socket v pipad, e byl pro socket nastaven asovy limit
pomoci setsockopt(2): accept(2), recv(2), recvfrom(2) a
recvmsg(2) - pokud byl nastaven asovy limit pro pijeti
(SO_RCVTIMEO); connect(2), send(2), sendto(2) a sendmsg(2) -
pokud byl nastaven asovy limit pro odeslani (SO_SNDTIMEO).
* epoll_wait(2), epoll_pwait(2).
* semop(2), semtimedop(2).
* sigtimedwait(2), sigwaitinfo(2).
* read(2) z popisovae soubor inotify(7).
* Jadro 2.6.21 a divji: futex(2) FUTEX_WAIT, sem_timedwait(3),
sem_wait(3).
* Jadro 2.6.8 a divji: msgrcv(2), msgsnd(2).
* Jadro 2.4 a divji: nanosleep(2).
SPLUJE STANDARDY
POSIX.1, s uvedenymi vyjimkami.
CHYBY
Signaly SIGIO a SIGLOST maji stejnou hodnotu. SIGLOST se ve zdrojovych
textech jadra ji nepouiva, ale pi pekladu uritych balik software se
stale pedpoklada, e signal .29 znamena SIGLOST.
DAL'I INFORMACE
kill(1), getrlimit(2), kill(2), killpg(2), setitimer(2), setrlimit(2),
sgetmask(2), sigaction(2), sigaltstack(2), signal(2), signalfd(2),
sigpending(2), sigprocmask(2), sigqueue(2), sigsuspend(2),
sigwaitinfo(2), abort(3), bsd_signal(3), longjmp(3), raise(3),
sigset(3), sigsetops(3), sigvec(3), sigwait(3), strsignal(3),
sysv_signal(3), core(5), proc(5), pthreads(7)
TIR'A
Tato stranka je souasti projektu Linux man-pages. Popis projektu a
informace o hlaeni chyb najdete na
http://www.kernel.org/doc/man-pages/.