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)