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

JMÉNO

       sigaction,  sigprocmask,  sigpending,  sigsuspend  -  Funkce POSIXu pro
       práci se signály.

SYNTAXE

       #include <signal.h>

       int sigaction(int signum, const struct sigaction *act, struct sigaction
       *oldact);

       int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);

       int sigpending(sigset_t *set);

       int sigsuspend(const sigset_t *mask);

POPIS

       Systémovým  voláním  sigaction  se určuje, jakou akci má proces provést
       při obdržení určitého signálu.

       Parametrem signum je určen signál a lze zadat kterýkoli  platný  signál
       kromě SIGKILL a SIGSTOP.

       Je-li  hodnota  act  nenulová,  je pro signál signum nainstalována akce
       act.  Je-li hodnota oldact  nenulová,  předchozí  akce  je  uložena  do
       oldact.

       Struktura sigaction je definována jako

              struct sigaction {
                  void (*sa_handler)(int);
                  sigset_t sa_mask;
                  int sa_flags;
                  void (*sa_restorer)(void);
              }

       sa_handler  určuje  akci,  která má být přiřazena signálu signum a může
       obsahovat SIG_DFL pro implicitní akci, SIG_IGN pro ignorování  signálu,
       nebo ukazatel na funkci ošetřující signál.

       sa_mask  je  maska  signálů,  které  mají  být  zablokovány při obsluze
       signálu.  Navíc je zablokován signál,  který  vyvolal  akci,  nejsou-li
       nastaveny příznaky SA_NODEFER nebo SA_NOMASK .

       sa_flags  je  množina příznaků, které ovlivňují obsluhu signálu.  Je to
       logický součet následujících bitových konstant:

              SA_NOCLDSTOP
                     Je-li signum SIGCHLD, negeneruje se signál při  zastavení
                     dětského  procesu  (tj.  dostane-li  tento  proces signál
                     SIGSTOP, SIGTSTP, SIGTTIN nebo SIGTTOU).

              SA_ONESHOT nebo SA_RESETHAND
                     Poté, co je zavolána obslužná funkce, se obsluha  signálu
                     vrací  do  implicitního  stavu.  (Takto se normálně chová
                     systémové volání signal(2) .)

              SA_RESTART
                     Nastaví kompatibilní  chování  s  BSD:  určitá  systémová
                     volání pak jsou po zpracování signálu restartována.

              SA_NOMASK neboli SA_NODEFER
                     Umožní   příchod   dalšího  signálu  během  jeho  vlastní
                     obslužné funkce.

       Pole sa_restorer je neaktuální a nemělo by být používáno.

       Systémovým voláním sigprocmask lze měnit seznam momentálně  blokovaných
       signálů. Záleží na parametru how, jaká změna nastane:

              SIG_BLOCK
                     Nový  seznam  blokovaných  signálů  bude  obsahovat dosud
                     blokované signály a signály v parametru set .

              SIG_UNBLOCK
                     Signály  v  parametru  set  jsou  odstraněny  ze  seznamu
                     blokovaných  signálů.  Je přípustné uvést v parametru set
                     signál, který není blokován.

              SIG_SETMASK
                     Seznam blokovaných signálů je nastaven na set.

       Je-li  hodnota  parametru  oldset   nenulová,   je   předchozí   seznam
       blokovaných signálů uložen do oldset.

       Systémové  volání sigpending dovoluje zjistit nevyřízené signály (které
       přišly při zablokování).  Maska  nevyřízených  signálů  je  uložena  do
       parametru set.

       Volání  sigsuspend  přechodně  nahradí  masku  signálů maskou zadanou v
       parametru mask a poté pozdrží provádění procesu do obdržení signálu.

NÁVRATOVÉ HODNOTY

       Funkce sigaction, sigprocmask, sigpending  a  sigsuspend  vrací  0  při
       úspěšném provedení a -1 při chybě.

CHYBOVÉ HODNOTY

       EINVAL Byl  zadán  neplatný  signál.  Tato chyba je také generována při
              pokusu  změnit  obsluhu  signálů  SIGKILL  nebo  SIGSTOP,  které
              nemohou být zachyceny.

       EFAULT act,  oldact,  set  nebo oldset ukazují do oblasti paměti, která
              nepatří do adresního prostoru procesu.

       EINTR  Systémové volání bylo přerušeno.

POZNÁMKY

       Signály SIGKILL or SIGSTOP nelze blokovat voláním sigprocmask. Pokusy o
       to budou v tichosti ignorovány.

       Podle  normy  POSIX  není  definováno chování procesu poté, co ignoruje
       signál SIGFPE, SIGILL, nebo SIGSEGV,  který  nebyl  generován  funkcemi
       kill()  nebo  raise().   Celočíselné  dělení  nulou  dává  nedefinovaný
       výsledek  a  na  některých  architekturách  generuje   signál   SIGFPE.
       Ignorování tohoto signálu může způsobit zacyklení procesu.

       Nastavení  akce pro signál SIGCHLD na SIG_IGN způsobí automatický zánik
       dětských procesů po jejich ukončení.

       Norma POSIX definuje  pouze  příznak  SA_NOCLDSTOP.   Používání  jiných
       příznaků v sa_flags je nepřenositelné.

       Příznak  SA_RESETHAND  je  kompatibilní  se  stejnojmenným  příznakem v
       systémech SVr4.

       Příznak SA_NODEFER je kompatibilní se stejnojmenným příznakem v SVr4 ve
       verzích  jádra  1.3.9  a  vyšších.  Ve  starších verzích jádra linuxová
       implementace dovolovala přijetí libovolného signálu, nejen  toho  který
       byl instalován (což způsobovalo ignorování nastavení sa_mask ).

       Jména SA_RESETHAND and SA_NODEFER jsou určena pro kompatibilitu se SVr4
       a byla zavedena ve verzi knihovny libc 3.0.9.

       Pro zjištění  momentálního  stavu  obsluhy  signálů  lze  volat  funkci
       sigaction s parametrem act rovným nule.  Zadáte-li nulové parametry act
       a oldact, lze ji použít ke kontrole, je-li daný signál  na  tom  kterém
       systému použitelný.

       Pro podrobnosti o manipulaci se skupinami signálů viz sigsetops(3)

SPLŇUJE STANDARDY

       POSIX, SVr4.  Dokumentace SVr4 se nezmiňuje o chybové hodnotě EINTR.

DALŠÍ INFORMACE

       kill(1),   kill(2),  killpg(2),  pause(2),  raise(3),  siginterrupt(3),
       signal(2), signal(7), sigsetops(3), sigvec(2)

VAROVÁNÍ

       Překlad  je  pravděpodobně  zastaralý.  Pokud  chcete  pomoci  s   jeho
       aktualizací, zamiřte na http://man-pages-cs-wiki.homelinux.net/