noble (2) rt_sigaction.2.gz

Provided by: manpages-pl-dev_4.21.0-2_all bug

NAZWA

       sigaction, rt_sigaction - bada i zmienia akcję sygnału

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

       #include <signal.h>

       int sigaction(int signum,
                     const struct sigaction *_Nullable restrict act,
                     struct sigaction *_Nullable restrict 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 specifies the action to be associated with signum and can be one of the following:

       •  SIG_DFL for the default action.

       •  SIG_IGN to ignore this signal.

       •  A  pointer  to  a  signal  handling  function.   This  function receives the signal number as its only
          argument.

       If SA_SIGINFO is specified  in  sa_flags,  then  sa_sigaction  (instead  of  sa_handler)   specifies  the
       signal-handling function for signum.  This function receives three arguments, as described below.

       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
              Do  not  add  the  signal  to  the thread's signal mask while the handler is executing, unless the
              signal is specified in act.sa_mask.  Consequently,  a  further  instance  of  the  signal  may  be
              delivered  to  the  thread  while  it is executing the handler.  This flag is meaningful only when
              establishing a signal handler.

              SA_NOMASK is an obsolete, nonstandard synonym for this flag.

       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 is an obsolete, nonstandard synonym for this flag.

       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.

       SA_UNSUPPORTED (od Linuksa 5.11)
              Used to dynamically probe for flag bit support.

              If  an  attempt to register a handler succeeds with this flag set in act->sa_flags alongside other
              flags that are potentially unsupported by the kernel, and an  immediately  subsequent  sigaction()
              call  specifying  the same signal number and with a non-NULL oldact argument yields SA_UNSUPPORTED
              clear in oldact->sa_flags, then oldact->sa_flags may be used as a bitmask describing which of  the
              potentially  unsupported  flags are, in fact, supported.  See the section "Dynamically probing for
              flag bit support" below for more details.

       SA_EXPOSE_TAGBITS (od Linuksa 5.11)
              Normally, when delivering a signal, an architecture-specific set of tag bits are cleared from  the
              si_addr  field of siginfo_t.  If this flag is set, an architecture-specific subset of the tag bits
              will be preserved in si_addr.

              Programs that need to be compatible with Linux versions older than 5.11 must use SA_UNSUPPORTED to
              probe for support.

   The siginfo_t argument to a SA_SIGINFO handler
       When  the  SA_SIGINFO  flag  is  specified  in act.sa_flags, the signal handler address is passed via the
       act.sa_sigaction field.  This handler takes three arguments, as follows:

           void
           handler(int sig, siginfo_t *info, void *ucontext)
           {
               ...
           }

       These three arguments are as follows

       sig    The number of the signal that caused invocation of the handler.

       info   A pointer to a siginfo_t, which is a structure containing further information about the signal, as
              described below.

       ucontext
              This  is  a  pointer  to a ucontext_t structure, cast to void *.  The structure pointed to by this
              field contains signal context information that was saved on the user-space stack  by  the  kernel;
              for details, see sigreturn(2).  Further information about the ucontext_t structure can be found in
              getcontext(3)  and signal(7).  Commonly, the handler function doesn't make any use  of  the  third
              argument.

       The siginfo_t data type is a structure with the following fields:

           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 */
               union sigval 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 fills in si_pid, si_uid, si_status, si_utime, and si_stime, providing  information  about  the
          child.   The  si_pid  field  is  the process ID of the child; si_uid is the child's real user ID.  The
          si_status field contains the exit status of the child (if si_code is CLD_EXITED), or the signal number
          that  caused  the  process to change state.  The si_utime and si_stime contain the user and system CPU
          time used by the child process; these fields do not include the  times  used  by  waited-for  children
          (unlike getrusage(2)  and times(2)).  Up to Linux 2.6, and since Linux 2.6.27, these fields report CPU
          time in units of sysconf(_SC_CLK_TCK).  In Linux 2.6 kernels before Linux 2.6.27,  a  bug  meant  that
          these fields reported time in units of the (configurable) system jiffy (see 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).

   The si_code field
       The  si_code field inside the siginfo_t argument that is passed to a SA_SIGINFO signal handler is a value
       (not a bit mask)  indicating why this signal was sent.  For a  ptrace(2)   event,  si_code  will  contain
       SIGTRAP and have the ptrace event in the high byte:

           (SIGTRAP | PTRACE_EVENT_foo << 8).

       For  a non-ptrace(2)  event, the values that can appear in si_code are described in the remainder of this
       section.  Since glibc 2.20, the definitions of most of these symbols  are  obtained  from  <signal.h>  by
       defining feature test macros (before including any header file) as follows:

       •  _XOPEN_SOURCE with the value 500 or greater;

       •  _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED; or

       •  _POSIX_C_SOURCE with the value 200809L or greater.

       For  the TRAP_* constants, the symbol definitions are provided only in the first two cases.  Before glibc
       2.20, no feature test macros were required to obtain these symbols.

       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
                  Queued  SIGIO  (only  up to Linux 2.2; from Linux 2.4 onward SIGIO/SIGPOLL fills in si_code as
                  described below).

           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)
                  Access was denied by memory protection keys.  See pkeys(7).  The protection key which  applied
                  to this access is available via si_pkey.

       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, tylko IA64)
                  Śledzone rozgałęzienie procesu złapane.

           TRAP_HWBKPT (od Linuksa 2.4, tylko IA64)
                  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).

   Dynamically probing for flag bit support
       The  sigaction()  call on Linux accepts unknown bits set in act->sa_flags without error.  The behavior of
       the kernel starting with Linux  5.11  is  that  a  second  sigaction()   will  clear  unknown  bits  from
       oldact->sa_flags.  However, historically, a second sigaction()  call would typically leave those bits set
       in oldact->sa_flags.

       This means that support for new flags cannot be detected simply by testing for a flag in sa_flags, and  a
       program must test that SA_UNSUPPORTED has been cleared before relying on the contents of sa_flags.

       Since  the  behavior  of  the  signal handler cannot be guaranteed unless the check passes, it is wise to
       either block the affected signal while registering the handler and performing the check in this case,  or
       where this is not possible, for example if the signal is synchronous, to issue the second sigaction()  in
       the signal handler itself.

       In kernels that do not support a specific flag, the kernel's behavior is as if the flag was not set, even
       if the flag was set in act->sa_flags.

       The  flags SA_NOCLDSTOP, SA_NOCLDWAIT, SA_SIGINFO, SA_ONSTACK, SA_RESTART, SA_NODEFER, SA_RESETHAND, and,
       if defined by the architecture, SA_RESTORER may not be reliably probed for using this mechanism,  because
       they  were  introduced  before Linux 5.11.  However, in general, programs may assume that these flags are
       supported, since they have all been supported since Linux 2.6, which was released in the year 2003.

       See EXAMPLES below for a demonstration of the use of SA_UNSUPPORTED.

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.

STANDARDY

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

UWAGI

       Dziecko utworzone przez fork(2) dziedziczy kopię ustawień sygnałów od swojego rodzica. Podczas  wywołania
       execve(2)  przywracane  są  wartości domyślne ustawień, z wyjątkiem ustawienia ignorowania sygnału, które
       nie jest zmieniane.

       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.

       The SA_NODEFER flag is compatible with the SVr4 flag of the same name under kernels 1.3.9 and later.   On
       older  kernels  the  Linux  implementation  allowed  the  receipt  of any signal, not just the one we are
       installing (effectively overriding any sa_mask settings).

       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-safety(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).

       On architectures where the signal trampoline resides in the C library, the  glibc  wrapper  function  for
       sigaction()   places  the  address  of  the  trampoline  code  in  the act.sa_restorer field and sets the
       SA_RESTORER flag in the act.sa_flags field.  See sigreturn(2).

       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
       Before the introduction of SA_SIGINFO, it was also possible to get some additional information about  the
       signal.   This  was  done by providing an sa_handler signal handler with a second argument of type struct
       sigcontext, which is the same structure as the one that  is  passed  in  the  uc_mcontext  field  of  the
       ucontext structure that is passed (via a pointer) in the third argument of the sa_sigaction handler.  See
       the relevant Linux kernel sources for details.  This use is obsolete now.

BŁĘDY

       When delivering a signal with a SA_SIGINFO handler, the kernel does not always provide meaningful  values
       for all of the fields of the siginfo_t that are relevant for that signal.

       Up  to  and  including  Linux  2.6.13,  specifying SA_NODEFER in sa_flags prevents not only the delivered
       signal from being masked during execution of the handler, but also  the  signals  specified  in  sa_mask.
       This bug was fixed in Linux 2.6.14.

PRZYKŁADY

       Patrz mprotect(2).

   Probing for flag support
       The  following  example  program  exits with status EXIT_SUCCESS if SA_EXPOSE_TAGBITS is determined to be
       supported, and EXIT_FAILURE otherwise.

       #include <signal.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       void
       handler(int signo, siginfo_t *info, void *context)
       {
           struct sigaction oldact;

           if (sigaction(SIGSEGV, NULL, &oldact) == -1
               || (oldact.sa_flags & SA_UNSUPPORTED)
               || !(oldact.sa_flags & SA_EXPOSE_TAGBITS))
           {
               _exit(EXIT_FAILURE);
           }
           _exit(EXIT_SUCCESS);
       }

       int
       main(void)
       {
           struct sigaction act = { 0 };

           act.sa_flags = SA_SIGINFO | SA_UNSUPPORTED | SA_EXPOSE_TAGBITS;
           act.sa_sigaction = &handler;
           if (sigaction(SIGSEGV, &act, NULL) == -1) {
               perror("sigaction");
               exit(EXIT_FAILURE);
           }

           raise(SIGSEGV);
       }

ZOBACZ TAKŻE

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

TŁUMACZENIE

       Autorami polskiego tłumaczenia niniejszej strony podręcznika  są:  Przemek  Borys  <pborys@dione.ids.pl>,
       Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając się z GNU General Public License w wersji  3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  lub
       nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy dyskusyjnej ⟨manpages-pl-
       list@lists.sourceforge.net⟩.