sigaction

SIGACTION(2)		 Linux - prirucka programatora		  SIGACTION(2)



JMENO
       sigaction,  sigprocmask,	 sigpending,  sigsuspend  -  Funkce POSIXu pro
       praci se signaly.


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
       Systemovym  volanim  sigaction  se urcuje, jakou akci ma proces provest
       pri obdrzeni urciteho signalu.

       Parametrem signum je urcen signal a lze zadat kterykoli	platny	signal
       krome SIGKILL a SIGSTOP.

       Je-li  hodnota  act  nenulova,  je pro signal signum nainstalovana akce
       act.  Je-li hodnota oldact  nenulova,  predchozi	 akce  je  ulozena  do
       oldact.

       Struktura sigaction je definovana jako

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

       sa_handler  urcuje  akci,  ktera ma byt prirazena signalu signum a muze
       obsahovat SIG_DFL pro implicitni akci, SIG_IGN pro ignorovani  signalu,
       nebo ukazatel na funkci osetrujici signal.

       sa_mask	je  maska  signalu,  ktere  maji  byt  zablokovany pri obsluze
       signalu.	 Navic je zablokovan signal,  ktery  vyvolal  akci,  nejsou-li
       nastaveny priznaky SA_NODEFER nebo SA_NOMASK .

       sa_flags	 je  mnozina priznaku, ktere ovlivnuji obsluhu signalu.	 Je to
       logicky soucet nasledujicich bitovych konstant:

	      SA_NOCLDSTOP
		     Je-li signum SIGCHLD, negeneruje se signal pri  zastaveni
		     detskeho  procesu	(tj.  dostane-li  tento	 proces signal
		     SIGSTOP, SIGTSTP, SIGTTIN nebo SIGTTOU).

	      SA_ONESHOT nebo SA_RESETHAND
		     Pote, co je zavolana obsluzna funkce, se obsluha  signalu
		     vraci  do	implicitniho  stavu.  (Takto se normalne chova
		     systemove volani signal(2) .)

	      SA_RESTART
		     Nastavi kompatibilni  chovani  s  BSD:  urcita  systemova
		     volani pak jsou po zpracovani signalu restartovana.

	      SA_NOMASK neboli SA_NODEFER
		     Umozni   prichod	dalsiho	 signalu  behem	 jeho  vlastni
		     obsluzne funkce.

       Pole sa_restorer je neaktualni a nemelo by byt pouzivano.

       Systemovym volanim sigprocmask lze menit seznam momentalne  blokovanych
       signalu. Zalezi na parametru how, jaka zmena nastane:

	      SIG_BLOCK
		     Novy seznam blokovanych signalu bude obsahovat dosud blo-
		     kovane signaly a signaly v parametru set .

	      SIG_UNBLOCK
		     Signaly v parametru set jsou odstraneny ze seznamu bloko-
		     vanych  signalu.	Je  pripustne  uvest  v	 parametru set
		     signal, ktery neni blokovan.

	      SIG_SETMASK
		     Seznam blokovanych signalu je nastaven na set.

       Je-li hodnota parametru oldset nenulova,	 je  predchozi	seznam	bloko-
       vanych signalu ulozen do oldset.

       Systemove  volani sigpending dovoluje zjistit nevyrizene signaly (ktere
       prisly pri zablokovani).	 Maska	nevyrizenych  signalu  je  ulozena  do
       parametru set.

       Volani  sigsuspend  prechodne  nahradi  masku  signalu maskou zadanou v
       parametru mask a pote pozdrzi provadeni procesu do obdrzeni signalu.


NAVRATOVE HODNOTY
       Funkce sigaction, sigprocmask, sigpending  a  sigsuspend	 vraci	0  pri
       uspesnem provedeni a -1 pri chybe.


CHYBOVE HODNOTY
       EINVAL Byl  zadan  neplatny  signal.  Tato chyba je take generovana pri
	      pokusu zmenit obsluhu signalu SIGKILL nebo SIGSTOP, ktere	 nemo-
	      hou byt zachyceny.

       EFAULT act,  oldact,  set  nebo oldset ukazuji do oblasti pameti, ktera
	      nepatri do adresniho prostoru procesu.

       EINTR  Systemove volani bylo preruseno.


POZNAMKY
       Signaly SIGKILL or SIGSTOP nelze blokovat volanim sigprocmask. Pokusy o
       to budou v tichosti ignorovany.

       Podle  normy  POSIX  neni  definovano chovani procesu pote, co ignoruje
       signal SIGFPE, SIGILL, nebo SIGSEGV,  ktery  nebyl  generovan  funkcemi
       kill() nebo raise().  Celociselne deleni nulou dava nedefinovany vysle-
       dek a na nekterych architekturach generuje signal  SIGFPE.   Ignorovani
       tohoto signalu muze zpusobit zacykleni procesu.

       Nastaveni  akce pro signal SIGCHLD na SIG_IGN zpusobi automaticky zanik
       detskych procesu po jejich ukonceni.

       Norma POSIX definuje  pouze  priznak  SA_NOCLDSTOP.   Pouzivani	jinych
       priznaku v sa_flags je neprenositelne.

       Priznak	SA_RESETHAND  je  kompatibilni	se  stejnojmennym  priznakem v
       systemech SVr4.

       Priznak SA_NODEFER je kompatibilni se stejnojmennym priznakem v SVr4 ve
       verzich	jadra  1.3.9  a	 vyssich.  Ve  starsich verzich jadra linuxova
       implementace dovolovala prijeti libovolneho signalu, nejen  toho	 ktery
       byl instalovan (coz zpusobovalo ignorovani nastaveni sa_mask ).

       Jmena SA_RESETHAND and SA_NODEFER jsou urcena pro kompatibilitu se SVr4
       a byla zavedena ve verzi knihovny libc 3.0.9.

       Pro zjisteni momentalniho stavu obsluhy signalu lze volat funkci sigac-
       tion  s	parametrem  act rovnym nule.  Zadate-li nulove parametry act a
       oldact, lze ji pouzit ke kontrole, je-li	 dany  signal  na  tom	kterem
       systemu pouzitelny.

       Pro podrobnosti o manipulaci se skupinami signalu viz sigsetops(3)

SPLNUJE STANDARDY
       POSIX, SVr4.  Dokumentace SVr4 se nezminuje o chybove hodnote EINTR.


DALSI INFORMACE
       kill(1),	 kill(2), killpg(2), pause(2), raise(3), siginterrupt(3), sig-
       nal(2), signal(7), sigsetops(3), sigvec(2)



Linux 1.3			 18.unora 1997			  SIGACTION(2)

Personal Tools