sigaction

Autres langues

Langue: pl

Autres versions - même langue

Version: 24 Sierpnia 1995 (fedora - 25/11/07)

Section: 2 (Appels système)

NAZWA

sigaction, sigprocmask, sigpending, sigsuspend - POSIX-owe funkcje obsługi sygnałów.

SKŁADNIA

#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);

OPIS

Wywołanie systemowe sigaction jest używane do zmieniania akcji, którą obiera proces po odebraniu określonego sygnału.

signum określa sygnał i może być dowolnym prawidłowym sygnałem poza SIGKILL i SIGSTOP.

Jeśli act jest niezerowe, to nowa akcja dla sygnału signum jest brana z act. Jeśli oldact też jest niezerowe, to poprzednia akcja jest w nim zachowywana.

Struktura sigaction jest zdefiniowana jako

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

sa_handler podaje akcję, związaną z sygnałem signum i może to być m.in SIG_DFL dla akcji domyślnej, SIG_IGN dla akcji ignorowania, lub wskaźnik do funkcji obsługującej sygnał.

sa_mask podaje maskę sygnałów, które powinny być blokowane podczas wywoływania handlera sygnałów. Dodatkowo, sygnał, który wywołał handler będzie zablokowany, chyba że użyto flag SA_NODEFER lub SA_NOMASK.

sa_flags podaje zbiór flag, które modyfikują zachowanie procesu obsługi sygnałów. Jest to zbiór wartości połączonych bitowym OR:

SA_NOCLDSTOP
Jeśli signum to SIGCHLD, nie odbieraj powiadomienia o zatrzymaniu procesu potomnego (np. gdy proces potomny otrzyma jeden z SIGSTOP, SIGTSTP, SIGTTIN lub SIGTTOU).
SA_ONESHOT or SA_RESETHAND
Odtórz akcję sygnałową do stanu domyślnego po wywołaniu handlera sygnałów. (Jest to domyślne zachowanie dla wywołania signal(2).)
SA_RESTART
Daj zachowanie, kompatybilne z semantyką sygnałową BSD, czyniąc pewne wywołania systemowe odtwarzalnymi przez sygnały.
SA_NOMASK or SA_NODEFER
Nie chroń sygnałów od bycia odebranymi z ich własnego handlera.

Element sa_restorer jest przedawniony i nie powinno się go używać.

Wywołanie sigprocmask jest używane do zmieniania listy obecnie blokowanych sygnałów. Zachowanie tego wywołania jest zależne od wartości how, w sposó następujący

SIG_BLOCK
Zestaw blokowanych sygnałów jest unią bieżącego zbioru i argumentu set.
SIG_UNBLOCK
Sygnały w set są usuwane z bieżącego zestawu sygnałów blokowanych. Legalnym jest próbowanie odblokiwania nieblokowanych sygnałów.
SIG_SETMASK
Zestaw blokowanych sygnałów jest ustawiany na argument set.

Jeśli oldset jest niezerowy, to poprzednia wartość maski sygnału jest w nim zachowywana.

Wywołanie sigpending umożliwia testowanie zalegających sygnałów (tych, które zostały podniesione w momencie blokowania). Maska sygnałowa dla zalegających sygnałów jest zachowana w set.

Wywołanie sigsuspend tymczasowo podmienia maskę sygnałową procesu na tą, przekazaną jako mask i zawiesza proces aż do otrzymania sygnału.

WARTOŚĆ ZWRACANA

sigaction, sigprocmask, sigpending i sigsuspend zwracają 0 po sukcesie i -1 po błędzie.

BŁĘDY

EINVAL
Podano nieprawidłowy sygnał. Będzie to też generowane dla sygnałów SIGKILL lub SIGSTOP.
EFAULT
act, oldact, set lub oldset wskazują na pamięc poza przestrzenią adresową.
EINTR
Wywołanie systemowe zostało przerwane.

UWAGI

Nie można zablokować sygnałów SIGKILL lub SIGSTOP . Próby takie zostaną zignorowane.

Zgodnie z POSIX, zachowanie procesu po po zignorowaniu SIGFPE, SIGILL i SIGSEGV, niegenerowanych przez kill() lub raise() jest niezdefiniowane. Dzielenie liczby całkowitej przez zero ma wynik niezdefiniowany. Na niektórych architekturach generuje sygnał SIGFPE. Ignorowanie go może prowadzić do nieskończonej pętli.

Ustawienie SIGCHLD na SIG_IGN daje automatyczne zbieranie plonów procesów potomnych.

Specyfikacja POSIX definiuje tylko SA_NOCLDSTOP. Użycie innych flag jest nieprzenośne.

Flaga SA_RESETHAND jest kompatybilna z podobną flagą z SVr4.

Flaga SA_NODEFER jest kompatybilna z podobną flagą z SVr4 dla jąder Linuksa 1.3.9 i nowszych.

Nazwy SA_RESETHAND i SA_NODEFER są kompatybilne z SVr4 i są dostępne tylko w wersjach bibliotek większych lub równych 3.0.9.

sigaction może być wywoływany z drugim argumentem o wartości null, powodując w ten sposób zapytanie bieżącego handlera sygnału. Może go też użyć do sprawdzenia, czy dany sygnał jest prawidłowy na obecnej maszynie. W tym celu należy dać zerowy zarówno drugi, jak i trzeci argument.

Zobacz sigsetops(3) dla szczegółów o operacjach na zbiorach sygnałów.

ZGODNE Z

POSIX, SVR4

ZOBACZ TAKŻE

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