Provided by: manpages-cs_0.18.20090209-3_all bug

JMÉNO

       signal - přehled 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  handleru,  programátorem  definovanou  funkcí,  která  je
       automaticky  volána při přijetí signálu. (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 signálu je atribut procesu: v mnohovláknových aplikacích je  dispozice  určitého
       signálu stejná pro všechna vlákna.

       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ání signálu
       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álu a nevyřízené signály
       Signál může být blokován, tj. nebude přijat, dokud  nebude  odblokován.  V  mezidobí  mezi
       vygenerovánim signálu a jeho přijetím je signál tzv. nevyřízený.

       Každé vlákno procesu má nezávislou masku signálu, 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).

       A child created via fork(2)  inherits a copy of its parent's signal mask; the signal  mask
       is preserved across execve(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.

       A child created via fork(2)  initially has an empty pending signal set; the pending signal
       set is preserved across an execve(2).

   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                                                                      HodnotaAkcePoznámka
       ─────────────────────────────────────────────────────────────────────────────────────────
       SIGHUP                                                                       1Term"Hangup" - při zavěšení na řídícím terminálu

                                                                                   nebo ukončení řídícího procesu.
       SIGINT                                                                       2Term"Interrupt" - přerušení z klávesnice.

       SIGQUIT                                                                      3Core"Quit" - ukončení z klávesnice.

       SIGILL                                                                       4Core"Illegal Instruction" - neplatná instrukce.

       SIGABRT                                                                      6Core"Abort" - ukončení funkcí abort(3)

       SIGFPE                                                                       8Core"Floating point exception" - přetečení v pohyblivé řádové čárce.

       SIGKILL                                                                      9Term"Kill" - signál pro nepodmíněné ukončení procesu.

       SIGSEGV                                                                     11CoreOdkaz na nepřípustnou adresu v paměti.

       SIGPIPE                                                                     13Term"Broken pipe" - pokus o zápis do roury,

                                                                                   kterou nemá žádný proces otevřenou pro čtení.
       SIGALRM                                                                     14TermSignál od časovače, nastaveného funkcí alarm(1)

       SIGTERM                                                                     15Term"Termination" - signál ukončení

       SIGUSR1                                                                     30,10,16TermSignál 1 definovaný uživatelem

       SIGUSR2                                                                     31,12,17TermSignál 2 definovaný uživatelem

       SIGCHLD                                                                     20,17,18IgnZastavení nebo ukončení dětského procesu

       SIGCONT                                                                     19,18,25ContPokračování po zastavení

       SIGSTOP                                                                     17,19,23StopZastavení procesu

       SIGTSTP                                                                     18,20,24StopZastavení znakem "Stop" z terminálu

       SIGTTIN                                                                     21,21,26Stopčtení z terminálu v procesu běžícím na pozadí

       SIGTTOU                                                                     22,22,27Stopzá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  nad  rámec  standardu  POSIX.1-1990,  které  jsou  popsány  v  SUSv2  a
       POSIX.1-2001.

       Signál                                                             HodnotaAkcePoznámka
       ────────────────────────────────────────────────────────────────────────────────
       SIGBUS                                                             10,7,10Core"Bus error" - pokus o přístup mimo mapovanou paměť

       SIGPOLL                                                            TermPollable event (Sys V).
                                                                          Synonymum SIGIO
       SIGPROF                                                            27,27,29TermČasovač používaný při profilování

       SIGSYS                                                             12,-,12CoreNepřípustný parametr syst. volání (SVr4)

       SIGTRAP                                                            5CorePřerušení při ladění (trasování,breakpoint)

       SIGURG                                                             16,23,21IgnSoket přijal data s příznakem Urgent (4.2 BSD)

       SIGVTALRM                                                          26,26,28TermVirtuální časovač (4.2 BSD)

       SIGXCPU                                                            24,24,30CorePřekročen limit času CPU (4.2 BSD)

       SIGXFSZ                                                            25,25,31CorePř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                                                       HodnotaAkcePoznámka
       ──────────────────────────────────────────────────────────────────────────
       SIGIOT                                                       6CoreIOT - synonymum signálu SIGABRT

       SIGEMT                                                       7,-,7Term
       SIGSTKFLT                                                    -,16,-TermChyba zásobníku koprocesoru (nepoužívá se)

       SIGIO                                                        23,29,22TermLze pokračovat ve vstupu/výstupu (4.2 BSD)

       SIGCLD                                                       -,-,18IgnSynonymum SIGCHLD

       SIGPWR                                                       29,30,19TermVýpadek napájení (Systém V)

       SIGINFO                                                      29,-,-Synonymum SIGPWR

       SIGLOST                                                      -,-,-TermZámek souboru byl ztracen

       SIGWINCH                                                     28,28,20IgnZměna velikosti okna (4.3 BSD, Sun)

       SIGUNUSED                                                    -,31,-TermNepouží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 neměly odkazovat na real-time signály pevně
       danými  čí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). Naopak,  pokud  na  proces  čeká  vícero
           standardních signálů, není pořadí jejich doručení definováno.

       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-2004  (také  známý  jako  POSIX.1-2001  Technical  Corrigendum  2)  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()
           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 odstraňuje fpathconf(), pathconf() a sysconf() z uvedeného seznamu a  přidává
       následující funkce:

           execl()
           execv()
           faccessat()
           fchmodat()
           fchownat()
           fexecve()
           fstatat()
           futimens()
           linkat()
           mkdirat()
           mkfifoat()
           mknod()
           mknodat()
           openat()
           readlinkat()
           renameat()
           symlinkat()
           unlinkat()
           utimensat()
           utimes()

   Přerušení systémových volání a funkcí knihoven prostřednictvím "signal handlers"
       Pokud  je  signal handler vyvolán v okamžiku, kdy je systémové volání nebo funkce knihovny
       blokována, pak:

       * je volání automaticky restartováno po návratu signal handleru, nebo

       * volání selže s chybou EINTR.

       Která z těchto možností nastane, záleží na rozhraní a  na  tom,  zda  byl  signal  handler
       definován  s  pomocí  vlajky  SA_RESTART (viz sigaction(2)). Podrobnosti se mezi Unixovými
       systémy liší; dále jsou uvedeny pro Linux.

       Pokud je blokované volání pro jedno z následujících rozhraní přerušeno signal handlerem  a
       byla  použita  vlajka  SA_RESTART,  je  volání  automaticky restartováno po návratu signal
       handleru. V opačném případě volání selže s chybou EINTR:

           * Volání read(2), readv(2), write(2), writev(2) a ioctl(2) na  "pomalých"  zařízeních.
             "Pomalé"  zařízení  je  takové,  kde  I/O  volání  může  blokovat nekonečně dlouho -
             například terminál, roura nebo  socket.  (Podle  této  definice  není  disk  pomalým
             zařízením)  Pokud  je  I/O  volání  přerušeno  signal  handlerem v okamžiku, kdy již
             přeneslo  nějaká  data,  je  návratovou  hodnotou  volání  úspěch   (obvykle   počet
             přenesených bajtů).

           * open(2), v případě, že může blokovat (např. při otevírání FIFO; viz fifo(7)).

           * wait(2), wait3(2), wait4(2), waitid(2) a waitpid(2).

           * Rozhraní  socketů: accept(2), connect(2), recv(2), recvfrom(2), recvmsg(2), send(2),
             sendto(2) a sendmsg(2); neplatí v případě, že byl pro socket nastaven  časový  limit
             (viz níže).

           * Rozhraní souborových zámků: flock(2) a fcntl(2)  F_SETLKW.

           * Rozhraní  pro POSIXové fronty zpráv: mq_receive(3), mq_timedreceive(3), mq_send(3) a
             mq_timedsend(3).

           * futex(2)  FUTEX_WAIT (od jádra 2.6.22; předtím vždycky selhalo s EINTR).

           * Rozhraní POSIXových semaforů:  sem_wait(3)  a  sem_timedwait(3)  (od  jádra  2.6.22;
             předtím vždycky selhalo s EINTR).

       Následující  rozhraní  se  po přerušení signal handlerem nikdy nerestartují, bez ohledu na
       použití SA_RESTART - vždycky selžou s chybou EINTR:

           * Rozhraní socketů  v  případě,  že  byl  pro  socket  nastaven  časový  limit  pomocí
             setsockopt(2):  accept(2),  recv(2),  recvfrom(2)  a recvmsg(2) - pokud byl nastaven
             časový limit pro přijetí (SO_RCVTIMEO); connect(2), send(2), sendto(2) a  sendmsg(2)
             - pokud byl nastaven časový limit pro odeslání (SO_SNDTIMEO).

           * Rozhraní  používaná  k čekání na signály: pause(2), sigsuspend(2), sigtimedwait(2) a
             sigwaitinfo(2).

           * Multiplexující rozhraní popisovačů souborů: epoll_wait(2), epoll_pwait(2),  poll(2),
             ppoll(2), select(2) a pselect(2).

           * System V IPC rozhraní: msgrcv(2), msgsnd(2), semop(2) a semtimedop(2).

           * Rozhraní pro spánek: clock_nanosleep(2), nanosleep(2) a usleep(3).

           * read(2)  z popisovače souborů inotify(7).

           * io_getevents(2).

       Funkce  sleep(3)  se také při přerušení signal handlerem nerestartuje, nýbrž vrátí úspěch:
       počet sekund, které zbývají ke spaní.

   Přerušení systémovách volání a funkcí knihoven signály Stop
       V Linuxu mohou některá blokující rozhraní selhat s chybou EINTR  i  bez  signal  handlerů,
       pokud  je  proces  zastaven  jedním  ze  stop  signálů a poté obnoven pomocí SIGCONT. Toto
       chování neodporuje POSIX.1 a neobjevuje se v jiných systémech.

       Linuxová rozhraní, v nichž se toto chování projevuje, jsou:

           * Rozhraní socketů  v  případě,  že  byl  pro  socket  nastaven  časový  limit  pomocí
             setsockopt(2):  accept(2),  recv(2),  recvfrom(2)  a recvmsg(2) - pokud byl nastaven
             časový limit pro přijetí (SO_RCVTIMEO); connect(2), send(2), sendto(2) a  sendmsg(2)
             - pokud byl nastaven časový limit pro odeslání (SO_SNDTIMEO).

           * epoll_wait(2), epoll_pwait(2).

           * semop(2), semtimedop(2).

           * sigtimedwait(2), sigwaitinfo(2).

           * read(2)  z popisovače souborů inotify(7).

           * Jádro 2.6.21 a dřívější: futex(2)  FUTEX_WAIT, sem_timedwait(3), sem_wait(3).

           * Jádro 2.6.8 a dřívější: msgrcv(2), msgsnd(2).

           * Jádro 2.4 a dřívější: nanosleep(2).

SPLŇUJE STANDARDY

       POSIX.1, s uvedenými výjimkami.

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),   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ÁŽ

       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/.