sigaction

SIGACTION(2)            PodrÄcznik programisty Linuksa            SIGACTION(2)



NAZWA
       sigaction, rt_sigaction - bada i zmienia akcjÄ sygnaÅu

SKÅADNIA
       #include <signal.h>

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

   Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

       sigaction(): _POSIX_C_SOURCE

       siginfo_t: _POSIX_C_SOURCE >= 199309L

OPIS
       WywoÅanie systemowe sigaction() jest używane do zmieniania akcji,
       którÄ odbiera proces po odebraniu okreÅlonego sygnaÅu. (Wprowadzenie
       do sygnaÅów można znaleÅºÄ  w podrÄczniku signals(7)).

       signum okreÅla sygnaÅ i może byÄ dowolnym prawidÅowym sygnaÅem poza
       SIGKILL i SIGSTOP.

       JeÅli act nie jest NULL-em, to nowa akcja dla sygnaÅu signum jest brana
       z act. JeÅli oldact też jest różny od NULL, to poprzednia akcja jest
       w nim zachowywana.

       Struktura sigaction jest zdefiniowana jako:

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

       Na niektórych architekturach czÄÅÄ tej struktury może byÄ uniÄ: nie
       należy ustawiaÄ jednoczeÅnie pól sa_handler oraz sa_sigaction.

       Pole sa_restorer nie jest przeznaczone do bezpoÅredniego stosowania
       (POSIX nie okreÅla pola sa_restorer). WiÄcej informacji o przeznaczeniu
       tego pola można znaleÅºÄ w podrÄczniku sigreturn(2).

       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Å. Funkcja ta ma tylko jeden
       argument, w którym bÄdzie przekazany numer sygnaÅu.

       Jeżeli wartoÅÄ SA_SIGINFO jest podana w sa_flags, to sa_sigaction
       (zamiast sa_handler) okreÅla funkcjÄ obsÅugi sygnaÅu dla signum.
       Funkcja ta otrzymuje numer sygnaÅu jako pierwszy argument, wskaźnik do
       siginfo_t jako drugi argument oraz wskaźnik do ucontext_t (rzutowany
       na void *) jako jej trzeci argument (Zazwyczaj funkcja obsÅugi sygnaÅu
       w ogóle nie używa trzeciego argumentu. WiÄcej informacji o ucontext_t
       można znaleÅºÄ w getcontext(3)).

       sa_mask okreÅla maskÄ sygnaÅów, które powinny byÄ blokowane (tj.
       dodane do maski sygnaÅów wÄtku, z którego sygnaÅ zostaÅ wywoÅany)
       podczas wywoÅywania funkcji obsÅugi sygnaÅów. Dodatkowo, sygnaÅ,
       który wywoÅaÅ tÄ funkcjÄ obsÅugi  bÄdzie zablokowany, chyba że użyto
       flagi SA_NODEFER.

       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 jest równe SIGCHLD, to nie sÄ odbierane
                  powiadomienia o zatrzymaniu procesu-dziecka (np. gdy dziecko
                  otrzyma jeden z SIGSTOP, SIGTSTP, SIGTTIN lub SIGTTOU) ani o
                  jego wznowieniu (np. po otrzymaniu SIGCONT) (patrz wait(2)).
                  Flaga ta ma znaczenie tylko w przypadku ustawiania funkcji
                  obsÅugi sygnaÅu SIGCHLD.

           SA_NOCLDWAIT (od Linuksa 2.6)
                  JeÅli signum jest równy SIGCHLD, to dzieci po swoim
                  zakoÅczeniu nie zostanÄ przeksztaÅcone w zombie. Patrz
                  także waitpid(2). Znacznik ma znaczenie tylko ustanawiania
                  funkcji obsÅugujÄcej sygnaÅ SIGCHLD lub podczas ustawiania
                  tego sygnaÅu na SIG_DLF.

                  JeÅli znacznik SA_NOCLDWAIT jest ustawiony podczas
                  ustanawiania funkcji obsÅugujÄcej sygnaÅ SIGCHLD, to POSIX.1
                  nie okreÅla, czy sygnaÅ SIGCHLD po zakoÅczeniu procesu
                  potomnego. Pod Linuksem sygnaÅ SIGCHLD jest w takim
                  przypadku generowany; niektóre inne systemy go nie
                  generujÄ.

           SA_NODEFER
                  Nie chroni sygnaÅów przed ich odebraniem z ich wÅasnej
                  procedury obsÅugi. Znacznik ma znaczenie tylko podczas
                  ustanawiania procedury obsÅugi sygnaÅu. SA_NOMASK jest
                  przestarzaÅym, niestandardowym synonimem tego znacznika.

           SA_ONSTACK
                  WywoÅuje funkcjÄ obsÅugi sygnaÅu, używajÄc alternatywnego
                  stosu ustawionego przez sigaltstack(2). Jeżeli ten
                  alternatywny stos nie jest dostÄpny, zostanie użyty stos
                  domyÅlny. Flaga ta ma znaczenie tylko w przypadku
                  ustanawiania funkcji obsÅugi sygnaÅu.

           SA_RESETHAND
                  Odtwarza akcjÄ sygnaÅowÄ do stanu domyÅlnego po wejÅciu
                  funkcji obsÅugi sygnaÅu. Flaga ta ma znaczenie tylko w
                  przypadku ustanawiania funkcji obsÅugi sygnaÅu. SA_ONESHOT
                  jest przestarzaÅym, niestandardowym synonimem tej flagi.

           SA_RESTART
                  Dostarcza zachowania kompatybilnego z semantykÄ sygnaÅowÄ
                  BSD, czyniÄc pewne wywoÅania systemowe odtwarzalnymi przez
                  sygnaÅy. Flaga ta ma znaczenie podczas ustanawiania
                  procedury obsÅugi sygnaÅu. Informacje na temat odtwarzania
                  wywoÅaÅ systemowych można znaleÅºÄ w podrÄczniku signal(7).

           SA_RESTORER
                  Nie jest przeznaczone do bezpoÅredniego stosowania. Flaga ta
                  jest używana przez biblioteki C do wskazania, że pole
                  sa_restorer zawiera adres "trampoliny sygnaÅu" WiÄcej
                  szczegóÅów w podrÄczniku sigreturn(2).

           SA_SIGINFO (od Linuksa 2.2)
                  Funkcja obsÅugi sygnaÅów pobiera trzy argumenty, a nie
                  jeden. W typ przypadku zamiast ustawiaÄ sa_handler należy
                  ustawiÄ sa_sigaction. Flaga ta ma znaczenie tylko w
                  przypadku ustanawiania funkcji obsÅugi sygnaÅu.

       Argument siginfo_t z sa_sigaction jest strukturÄ zawierajÄcÄ
       nastÄpujÄce pola:

           siginfo_t {
               int      si_signo;    /* Numer sygnaÅu */
               int      si_errno;    /* WartoÅÄ zmiennej errno */
               int      si_code;     /* Kod sygnaÅu */
               int      si_trapno;   /* Numer puÅapki, które spowodowaÅa
                                        sprzÄtowe wygenerowanie sygnaÅu
                                        (nieużywane na wiÄkszoÅci architektur) */
               pid_t    si_pid;      /* ID procesu wysyÅajÄcego */
               uid_t    si_uid;      /* Rzeczywiste ID użytk. procesu wysyÅajÄcego */
               int      si_status;   /* Kod lub sygnaÅ zakoÅczenia */
               clock_t  si_utime;    /* Czas zużyty w przestrzeni użytkownika */
               clock_t  si_stime;    /* Czas zużyty przez system operacyjny */
               sigval_t si_value;    /* WartoÅÄ sygnaÅu */
               int      si_int;      /* SygnaÅ POSIX.1b */
               void    *si_ptr;      /* SygnaÅ POSIX.1b */
               int      si_overrun;  /* Licznik przekr. timerów; timery POSIX.1b */
               int      si_timerid;  /* ID timera; timery POSIX.1b */
               void    *si_addr;     /* Adres pamiÄci powodujÄcy bÅÄd */
               long     si_band;     /* Grupa zdarzenia (byÅ int w
                                        glibc 2.3.2 i wczeÅniejszych) */
               int      si_fd;       /* Deskryptor pliku */
               short    si_addr_lsb; /* Mniej istotny bit adresu
                                        (od Linuksa 2.6.32) */
               void    *si_lower;    /* Kres dolny przy wystÄpieniu naruszenia
                                        adresu (od Linuksa 3.19) */
               void    *si_upper;    /* Kres górny przy wystÄpieniu naruszenia
                                        adresu (od Linuksa 3.19) */
               int      si_pkey;     /* Klucz zabezpieczajÄcy na PTE bÄdÄcy powodem
                                        bÅÄdu (od Linuksa 4.6) */
               void    *si_call_addr;/* Adres instrukcji wywoÅania systemowego
                                        (od Linuksa 3.5) */
               int      si_syscall;  /* Liczba próbowanych wywoÅaÅ systemowych
                                        (od Linuksa 3.5) */
               unsigned int si_arch; /* Architektura próbowanego wywoÅ. systemowego
                                        (od Linuksa 3.5) */
           }

       si_signo, si_errno i si_code sÄ zdefiniowane dla wszystkich sygnaÅów.
       (Generalnie si_errno nie jest używane pod Linuksem). PozostaÅe pola
       struktury mogÄ byÄ uniÄ; powinno siÄ odczytywaÄ tylko pola istotne dla
       danego sygnaÅu.

       * SygnaÅy wysÅane przez kill(2) i sigqueue(3) majÄ wypeÅnione pola
         si_pid oraz si_uid. Dodatkowo sygnaÅy wysÅane przez sigqueue(3) majÄ
         w polach si_int i si_ptr ustawione wartoÅci podane przez nadawcÄ
         sygnaÅu; szczegóÅy opisano w sigqueue(3).

       * SygnaÅy wysÅane przez timery POSIX.1b (od Linuksa 2.6) majÄ
         uzupeÅnione pola si_overrun i si_timerid. Pole si_timerid zawiera
         wewnÄtrzny identyfikator używany przez jÄdro do identyfikacji
         timera; nie jest to ten sam identyfikator, który zwraca
         timer_create(2). Pole si_overrun zawiera informacjÄ o tym, ile razy
         timer siÄ przepeÅniÅ — jest to ta sama informacja, którÄ zwraca
         timer_getoverrun(2). Pola te sÄ niestandardowymi rozszerzeniami
         Linuksa.

       * SygnaÅy wysÅane w celu notyfikacji kolejki komunikatów (patrz opis
         SIGEV_SIGNAL in mq_notify(3)) majÄ pola si_int/si_ptr wypeÅnione
         wartoÅciami sigev_value przekazanymi do mq_notify(3); ponadto si_pid
         zawiera identyfikator procesu wysyÅajÄcego sygnaÅ, a si_uid
         rzeczywisty identyfikator użytkownika - nadawcy sygnaÅu.

       * SIGCHLD ustawia pola si_pid, si_uid, si_status, si_utime i si_stime,
         dostarczajÄc informacji o procesie potomnym. Pole si_pid jest
         identyfikatorem potomka, si_uid jest identyfikatorem rzeczywistego
         użytkownika procesu potomnego. Pole si_status zawiera kod
         zakoÅczenia potomka (jeÅli si_code jest równe CLD_EXITED) lub numer
         sygnaÅu, który spowodowaÅ zmianÄ stanu. Pola si_utime i si_stime
         zawierajÄ czasy spÄdzone przez potomka w przestrzeniach użytkownika
         i systemowej; w przeciwieÅstwie do getrusage(2) i times(2), pola te
         nie zawierajÄ czasów oczekiwania na potomków. W jÄdrach
         wczeÅniejszych niż 2.6, a także w 2.6.27 i nowszych, pola zawierajÄ
         czas CPU w jednostkach sysconf(_SC_CLK_TCK). W jÄdrach 2.6
         wczeÅniejszych niż 2.6.27 z powodu bÅÄdu używane byÅy
         (konfigurowalne) jednostki jiffy (patrz time(7)).

       * SIGILL, SIGFPE, SIGSEGV, SIGBUS oraz SIGTRAP wypeÅniajÄ pole si_addr,
         ustawiajÄc w nim adres bÅÄdu. Na niektórych architekturach sygnaÅy
         wypeÅniajÄ także pole si_trapno.

         Niektóre bÅÄdy pochodne SIGBUS, w szczególnoÅci BUS_MCEERR_AO i
         BUS_MCEERR_AR ustawiajÄ także si_addr_lsb. Pole to oznacza najmniej
         znaczÄcy bit adresu, zatem i rozmiary uszkodzeÅ. Na przykÅad jeÅli
         caÅa strona zostaÅa uszkodzona,  si_addr_lsb zawieraÄ bÄdzie
         log2(sysconf(_SC_PAGESIZE)). Gdy jako odpowiedź na zdarzenie
         ptrace(2) (PTRACE_EVENT_foo) zostanie dostarczony SIGTRAP, pole
         si_addr nie jest wypeÅnione, natomiast pola si_pid i si_uid sÄ
         wypeÅnione identyfikatorami odpowiednio procesu i użytkownika
         odpowiedzialnego za dostarczenie puÅapki. W przypadku seccomp(2) jako
         dostarczenie zdarzenia pokazany zostanie zrzut. BUS_MCERR_* i
         si_addr_lsb sÄ rozszerzeniami specyficznymi dla Linuksa.

         SEGV_BNDERR bÄdÄcy podbÅÄdem SIGSEGV wypeÅnia pola si_lower i
         si_upper.

         SEGV_PKUERR bÄdÄcy podbÅÄdem SIGSEGV wypeÅnia pole si_pkey.

       * SIGIO/SIGPOLL (te dwie nazwy sÄ synonimami pod Linuksem) wypeÅnia
         pola si_band i si_fd.  Zdarzenie si_band jest maskÄ bitowÄ
         zawierajÄcÄ te same wartoÅci, które poll(2) umieszcza w polu
         revents. Pole si_fd oznacza deskryptor pliku, na którym wystÄpiÅo
         dane zdarzenie wejÅcia/wyjÅcia; wiÄcej szczegóÅów w opisie F_SETSIG
         w podrÄczniku fcntl(2).

       * SIGSYS, generowany (od Linuksa 3.5) gdy filtr seccomp zwróci
         SECCOMP_RET_TRAP, wypeÅnia pola si_call_addr, si_syscall, si_arch,
         si_errno i inne, zgodnie z opisem z seccomp(2).

       si_code jest wartoÅciÄ (a nie maskÄ bitowÄ) okreÅlajÄcÄ powód wysÅania
       sygnaÅu. Dla zdarzenia ptrace(2), pole si_code bÄdzie zawieraÄ SIGTRAP
       i mieÄ zdarzenie ptrace w najwyższym bajcie:

           (SIGTRAP | PTRACE_EVENT_foo << 8).

       W przypadku zwykÅego sygnaÅu, poniżej zestawiono wartoÅci, które mogÄ
       wystÄpowaÄ w si_code dowolnego sygnaÅu razem z powodami, dla których
       sygnaÅ byÅ wygenerowany.

           SI_USER
                  kill(2).

           SI_KERNEL
                  WysyÅany przez jÄdro.

           SI_QUEUE
                  sigqueue(3).

           SI_TIMER
                  WygaÅniÄcie timera POSIX.

           SI_MESGQ (od Linuksa 2.6.6)
                  Zmiana stanu kolejki komunikatów POSIX; patrz mq_notify(3)

           SI_ASYNCIO
                  UkoÅczenie asynchronicznej operacji wejÅcia/wyjÅcia.

           SI_SIGIO
                  Kolejkowany SIGIO (tylko w jÄdrach do wersji 2.2 Linuksa; od
                  Linuksa 2.4 SIGIO/SIGPOLL wypeÅniajÄ si_code, tak jak to
                  opisano poniżej).

           SI_TKILL (od Linuksa 2.4.19)
                  tkill(2) lub tgkill(2)

       NastÄpujÄce wartoÅci mogÄ zostaÄ umieszczone w si_code sygnaÅu SIGILL:

           ILL_ILLOPC
                  Niedozwolony kod operacji.

           ILL_ILLOPN
                  Niedozwolony operand.

           ILL_ILLADR
                  Niedozwolony tryb adresowania.

           ILL_ILLTRP
                  Niedozwolona puÅapka.

           ILL_PRVOPC
                  Uprzywilejowany kod operacji.

           ILL_PRVREG
                  Uprzywilejowany rejestr.

           ILL_COPROC
                  BÅÄd koprocesora.

           ILL_BADSTK
                  WewnÄtrzny bÅÄd stosu.

       NastÄpujÄce wartoÅci mogÄ zostaÄ umieszczone w si_code sygnaÅu SIGFPE:

           FPE_INTDIV
                  Dzielenie wartoÅci caÅkowitej przez zero.

           FPE_INTOVF
                  PrzepeÅnienie liczby caÅkowitej.

           FPE_FLTDIV
                  Dzielenie wartoÅci zmiennoprzecinkowej przez zero.

           FPE_FLTOVF
                  Przekroczenie zakresu operacji zmiennoprzecinkowej.

           FPE_FLTUND
                  Przekroczenie (w dóÅ) zakresu operacji zmiennoprzecinkowej.

           FPE_FLTRES
                  NiedokÅadny wynik operacji zmiennoprzecinkowej.

           FPE_FLTINV
                  Niepoprawna operacja zmiennoprzecinkowa.

           FPE_FLTSUB
                  Dolny indeks poza zakresem.

       NastÄpujÄce wartoÅci mogÄ zostaÄ umieszczone w si_code sygnaÅu SIGSEGV:

           SEGV_MAPERR
                  Adres niemapowany do obiektu.

           SEGV_ACCERR
                  Niepoprawne uprawnienia mapowanego obiektu.

           SEGV_BNDERR (od Linuksa 3.19)
                  Niepowodzenie sprawdzenia przypisania adresu.

           SEGV_PKUERR (od Linuksa 4.6)
                  Niepowodzenie klucza zabezpieczajÄcego.

       NastÄpujÄce wartoÅci mogÄ zostaÄ umieszczone w si_code sygnaÅu SIGBUS:

           BUS_ADRALN
                  Niepoprawne wyrównanie adresu.

           BUS_ADRERR
                  NieistniejÄcy adres fizyczny.

           BUS_OBJERR
                  BÅÄd sprzÄtowy specyficzny dla obiektu.

           BUS_MCEERR_AR (od Linuksa 2.6.32)
                  SprzÄtowy bÅÄd pamiÄci podczas sprawdzania komputera;
                  wymagane podjÄcie akcji.

           BUS_MCEERR_AO (od Linuksa 2.6.32)
                  Wykryto sprzÄtowy bÅÄd pamiÄci w procesie; opcjonalne
                  podjÄcie akcji.

       NastÄpujÄce wartoÅci mogÄ zostaÄ umieszczone w si_code sygnaÅu SIGTRAP:

           TRAP_BRKPT
                  Punkt wstrzymania procesu.

           TRAP_TRACE
                  Åledzony proces zÅapany.

           TRAP_BRANCH (od Linuksa 2.4)
                  Åledzone rozgaÅÄzienie procesu zÅapane.

           TRAP_HWBKPT (od Linuksa 2.4)
                  PuÅapka sprzÄtowa.

       NastÄpujÄce wartoÅci mogÄ zostaÄ umieszczone w si_code sygnaÅu SIGCHLD:

           CLD_EXITED
                  Proces potomny siÄ zakoÅczyÅ.

           CLD_KILLED
                  Proces potomny zostaÅ zabity.

           CLD_DUMPED
                  Potomek zakoÅczyÅ siÄ w nieprawidÅowy sposób.

           CLD_TRAPPED
                  Åledzony potomek zostaÅ zÅapany.

           CLD_STOPPED
                  Proces potomny zostaÅ zatrzymany.

           CLD_CONTINUED (od Linuksa 2.6.9)
                  Zatrzymany proces potomny zostaÅ wznowiony.

       NastÄpujÄce wartoÅci mogÄ zostaÄ umieszczone w si_code sygnaÅu
       SIGIO/SIGPOLL:

           POLL_IN
                  DostÄpne dane na wejÅciu.

           POLL_OUT
                  DostÄpne bufory wyjÅcia.

           POLL_MSG
                  DostÄpna wiadomoÅÄ na wejÅciu.

           POLL_ERR
                  BÅÄd wejÅcia/wyjÅcia.

           POLL_PRI
                  DostÄpne wejÅcie o wysokim priorytecie.

           POLL_HUP
                  UrzÄdzenie odÅÄczone.

       NastÄpujÄca wartoÅÄ może zostaÄ umieszczona w si_code sygnaÅu SIGSYS:

           SYS_SECCOMP (od Linuksa 3.5)
                  Wyzwolone przez reguÅÄ filtra seccomp(2).

WARTOÅÄ ZWRACANA
       sigaction() w przypadku powodzenia zwraca 0. W razie wystÄpienia bÅÄdu
       zwracane jest -1 i ustawiana jest zmienna errno wskazujÄc na bÅÄd.

BÅÄDY
       EFAULT act lub oldact wskazujÄ na pamiÄÄ poza przestrzeniÄ adresowÄ
              procesu.

       EINVAL Podano nieprawidÅowy sygnaÅ. BÄdzie to też generowane w
              przypadku próby zmienienia akcji dla sygnaÅów SIGKILL lub
              SIGSTOP, które nie mogÄ byÄ przechwycone lub zignorowane.

ZGODNE Z
       POSIX.1-2001, POSIX.1-2008, SVr4.

UWAGI
       Potomek utworzony przez fork(2) dziedziczy kopiÄ ustawieÅ sygnaÅów
       swojego rodzica. Podczas execve(2) ustawienia procedur obsÅugi
       sygnaÅów sÄ resetowane do wartoÅci domyÅlnych, z wyjÄtkiem sygnaÅów
       ignorowanych, które nie sÄ zmieniane (i bÄdÄ dalej ignorowane po
       wywoÅaniu execve(2)).

       Zgodnie z POSIX, zachowanie procesu po zignorowaniu sygnaÅu SIGFPE,
       SIGILL lub SIGSEGV, niewygenerowanego przez kill(2) lub raise(3), jest
       niezdefiniowane. Dzielenie liczby caÅkowitej przez zero ma wynik
       niezdefiniowany. Na niektórych architekturach generuje sygnaŠSIGFPE
       (Także dzielenie najmniejszej ujemnej liczby caÅkowitej przez -1 może
       wygenerowaÄ SIGFPE). Ignorowanie go może prowadziÄ do nieskoÅczonej
       pÄtli.

       POSIX.1-1990 zabraniaÅ ustawiania akcji dla SIGCHLD na SIG_IGN.
       POSIX.1-2001 i późniejsze pozwalajÄ na to, tak że można użyÄ
       ignorowania SIGCHLD, żeby zapobiec tworzeniu procesów-duchów (patrz
       wait(2)). Niemniej jednak, historyczne zachowanie systemów BSD i
       System V w zakresie ignorowania SIGCHLD jest inne, tak wiÄc jedynÄ
       caÅkowicie przenoÅnÄ metodÄ zapewnienia, że potomek po zakoÅczeniu nie
       zostanie procesem-duchem jest przechwytywanie sygnaÅu SIGCHLD i
       wywoÅanie funkcji wait(2) lub podobnej.

       POSIX.1-1990 okreÅlaÅ tylko SA_NOCLDSTOP. W POSIX.1-2001 dodano
       SA_NOCLDSTOP, SA_NOCLDWAIT, SA_NODEFER, SA_ONSTACK, SA_RESETHAND,
       SA_RESTART oraz SA_SIGINFO. Używanie tych nowych wartoÅci sa_flags
       może byÄ mniej przenoÅne w aplikacjach przewidzianych do użycia w
       starszych implementacjach Uniksa.

       Flaga SA_RESETHAND jest kompatybilna z flagÄ w SVr4 o tej samej nazwie.

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

       sigaction() może byÄ wywoÅywany z drugim argumentem o wartoÅci NULL,
       powodujÄc w ten sposób zapytanie o bieżÄcy handler sygnaÅu. Może go
       też użyÄ do sprawdzenia, czy dany sygnaÅ jest prawidÅowy na obecnej
       maszynie. W tym celu należy zarówno drugi, jak i trzeci argument
       ustawiÄ na NULL.

       Nie można zablokowaÄ sygnaÅów SIGKILL lub SIGSTOP (przez podanie ich
       w sa_mask). Próby takie zostanÄ zignorowane.

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

       ListÄ funkcji, które można bezpiecznie wywoÅaÄ w procedurze obsÅugi
       sygnaÅu, można znaleÅºÄ w podrÄczniku signal(7).

   Różnice biblioteki C/jÄdra
       Funkcja opakowujÄca glibc dla sigaction() daje bÅÄd (EINVAL) przy
       próbie zmiany dyspozycji dwóch sygnaÅów czasu rzeczywistego
       używanych wewnÄtrznie przez implementacjÄ wÄtkowÄ NPTL. WiÄcej
       szczegóÅów w podrÄczniku nptl(7).

       Oryginalne linuksowe wywoÅanie systemowe nazywaÅo siÄ sigaction().
       Jednak po pojawieniu siÄ sygnaÅów czasu rzeczywistego w Linuksie 2.2,
       32-bitowy typ sigset_t o staÅym rozmiarze obsÅugiwany przez to
       wywoÅanie przestaÅ dobrze sÅużyÄ swemu zadaniu. Z tego powodu, w celu
       obsÅugi powiÄkszonego typu sigset_t dodano nowe wywoÅanie systemowe
       rt_sigaction(). Nowe wywoÅanie przyjmuje czwarty argument size_t
       sigsetsize, który okreÅla rozmiar w bajtach zestawu sygnaÅów w
       act.sa_mask i oldact.sa_mask. Argument ten obecnie musi mieÄ wartoÅÄ
       sizeof(sigset_t) (albo nastÄpi bÅÄd EINVAL). Opakowanie glibc
       sigaction() ukrywa te detale przed nami, po cichu wywoÅujÄc
       rt_sigaction() jeÅli udostÄpnia je jÄdro.

   Nieudokumentowane
       Przed wprowadzeniem SA_SIGINFO również byÅo możliwe otrzymanie
       pewnych dodatkowych informacji - przez użycie sa_handler z drugim
       argumentem bÄdÄcym typu struct sigcontext. SzczegóÅy można znaleÅºÄ w
       odpowiednich źródÅach jÄdra Linux. To użycie jest obecnie
       przestarzaÅe.

BÅÄDY
       W jÄdrze 2.6.13 i wczeÅniejszych podanie SA_NODEFER w sa_flags
       zapobiegaÅo maskowaniu nie tylko dostarczonego sygnaÅu podczas
       wykonywania procedury obsÅugi sygnaÅu, ale także sygnaÅów okreÅlonych
       w sa_mask. Ten bÅÄd zostaÅ poprawiony w 2.6.14.

PRZYKÅAD
       Patrz mprotect(2).

ZOBACZ TAKŻE
       kill(1), kill(2), killpg(2), pause(2), restart_syscall(2), seccomp(2)
       sigaltstack(2), signal(2), signalfd(2), sigpending(2), sigreturn(2),
       sigprocmask(2), sigsuspend(2), wait(2), raise(3), siginterrupt(3),
       sigqueue(3), sigsetops(3), sigvec(3), core(5), signal(7)

O STRONIE
       Angielska wersja tej strony pochodzi z wydania 4.07 projektu Linux
       man-pages. Opis projektu, informacje dotyczÄce zgÅaszania bÅÄdów, oraz
       najnowszÄ wersjÄ oryginaÅu można znaleÅºÄ pod adresem
       https://www.kernel.org/doc/man-pages/.

TÅUMACZENIE
       Autorami polskiego tÅumaczenia niniejszej strony podrÄcznika man sÄ:
       Przemek Borys (PTM) <pborys@dione.ids.pl>, Robert Luberda
       <robert@debian.org> i MichaÅ KuÅach <michal.kulach@gmail.com>.

       Polskie tÅumaczenie jest czÄÅciÄ projektu manpages-pl; uwagi, pomoc,
       zgÅaszanie bÅÄdów na stronie http://sourceforge.net/projects/manpages-
       pl/. Jest zgodne z wersjÄ  4.07 oryginaÅu.



Linux                             2016-03-15                      SIGACTION(2)