.\" -*- coding: UTF-8 -*- .\" Copyright (c) 1994,1995 Mike Battersby .\" and Copyright 2004, 2005 Michael Kerrisk .\" based on work by faith@cs.unc.edu .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" Modified, aeb, 960424 .\" Modified Fri Jan 31 17:31:20 1997 by Eric S. Raymond .\" Modified Thu Nov 26 02:12:45 1998 by aeb - add SIGCHLD stuff. .\" Modified Sat May 8 17:40:19 1999 by Matthew Wilcox .\" add POSIX.1b signals .\" Modified Sat Dec 29 01:44:52 2001 by Evan Jones .\" SA_ONSTACK .\" Modified 2004-11-11 by Michael Kerrisk .\" Added mention of SIGCONT under SA_NOCLDSTOP .\" Added SA_NOCLDWAIT .\" Modified 2004-11-17 by Michael Kerrisk .\" Updated discussion for POSIX.1-2001 and SIGCHLD and sa_flags. .\" Formatting fixes .\" 2004-12-09, mtk, added SI_TKILL + other minor changes .\" 2005-09-15, mtk, split sigpending(), sigprocmask(), sigsuspend() .\" out of this page into separate pages. .\" 2010-06-11 Andi Kleen, add hwpoison signal extensions .\" 2010-06-11 mtk, improvements to discussion of various siginfo_t fields. .\" 2015-01-17, Kees Cook .\" Added notes on ptrace SIGTRAP and SYS_SECCOMP. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sigaction 2 "10 lutego 2023 r." "Linux man\-pages 6.03" .SH NAZWA sigaction, rt_sigaction \- bada i zmienia akcję sygnału .SH BIBLIOTEKA Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP) .SH SKŁADNIA .nf \fB#include \fP .PP \fBint sigaction(int \fP\fIsignum\fP\fB,\fP \fB const struct sigaction *_Nullable restrict \fP\fIact\fP\fB,\fP \fB struct sigaction *_Nullable restrict \fP\fIoldact\fP\fB);\fP .fi .PP .RS -4 Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)): .RE .PP \fBsigaction\fP(): .nf _POSIX_C_SOURCE .fi .PP \fIsiginfo_t\fP: .nf _POSIX_C_SOURCE >= 199309L .fi .SH OPIS Wywołanie systemowe \fBsigaction\fP() 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 \fBsignals\fP(7)). .PP \fIsignum\fP określa sygnał i może być dowolnym prawidłowym sygnałem poza \fBSIGKILL\fP i \fBSIGSTOP\fP. .PP Jeśli \fIact\fP nie jest NULL\-em, to nowa akcja dla sygnału \fIsignum\fP jest brana z \fIact\fP. Jeśli \fIoldact\fP też jest różny od NULL, to poprzednia akcja jest w nim zachowywana. .PP Struktura \fIsigaction\fP jest zdefiniowana jako: .PP .in +4n .EX struct sigaction { void (*sa_handler)(int); void (*sa_sigaction)(int, siginfo_t *, void *); sigset_t sa_mask; int sa_flags; void (*sa_restorer)(void); }; .EE .in .PP Na niektórych architekturach część tej struktury może być unią: nie należy ustawiać jednocześnie pól \fIsa_handler\fP oraz \fIsa_sigaction\fP. .PP Pole \fIsa_restorer\fP nie jest przeznaczone do bezpośredniego stosowania (POSIX nie określa pola \fIsa_restorer\fP). Więcej informacji o przeznaczeniu tego pola można znaleźć w podręczniku \fBsigreturn\fP(2). .PP \fIsa_handler\fP specifies the action to be associated with \fIsignum\fP and can be one of the following: .IP \[bu] 3 \fBSIG_DFL\fP for the default action. .IP \[bu] \fBSIG_IGN\fP to ignore this signal. .IP \[bu] A pointer to a signal handling function. This function receives the signal number as its only argument. .PP If \fBSA_SIGINFO\fP is specified in \fIsa_flags\fP, then \fIsa_sigaction\fP (instead of \fIsa_handler\fP) specifies the signal\-handling function for \fIsignum\fP. This function receives three arguments, as described below. .PP \fIsa_mask\fP 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 \fBSA_NODEFER\fP. .PP \fIsa_flags\fP podaje zbiór flag, które modyfikują zachowanie procesu obsługi sygnałów. Jest to zbiór wartości połączonych bitowym OR: .TP \fBSA_NOCLDSTOP\fP Jeśli \fIsignum\fP jest równe \fBSIGCHLD\fP, to nie są odbierane powiadomienia o zatrzymaniu procesu\-dziecka (np. gdy dziecko otrzyma jeden z \fBSIGSTOP\fP, \fBSIGTSTP\fP, \fBSIGTTIN\fP lub \fBSIGTTOU\fP) ani o jego wznowieniu (np. po otrzymaniu \fBSIGCONT\fP) (patrz \fBwait\fP(2)). Flaga ta ma znaczenie tylko w przypadku ustawiania funkcji obsługi sygnału \fBSIGCHLD\fP. .TP \fBSA_NOCLDWAIT\fP (od Linuksa 2.6) .\" To be precise: Linux 2.5.60 -- MTK Jeśli \fIsignum\fP jest równy \fBSIGCHLD\fP, to dzieci po swoim zakończeniu nie zostaną przekształcone w zombie. Patrz także \fBwaitpid\fP(2). Znacznik ma znaczenie tylko ustanawiania funkcji obsługującej sygnał \fBSIGCHLD\fP lub podczas ustawiania tego sygnału na \fBSIG_DLF\fP. .IP Jeśli znacznik \fBSA_NOCLDWAIT\fP jest ustawiony podczas ustanawiania funkcji obsługującej sygnał \fBSIGCHLD\fP, to POSIX.1 nie określa, czy sygnał \fBSIGCHLD\fP po zakończeniu procesu potomnego. Pod Linuksem sygnał \fBSIGCHLD\fP jest w takim przypadku generowany; niektóre inne systemy go nie generują. .TP \fBSA_NODEFER\fP Do not add the signal to the thread's signal mask while the handler is executing, unless the signal is specified in \fIact.sa_mask\fP. 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. .IP \fBSA_NOMASK\fP is an obsolete, nonstandard synonym for this flag. .TP \fBSA_ONSTACK\fP Wywołuje funkcję obsługi sygnału, używając alternatywnego stosu ustawionego przez \fBsigaltstack\fP(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. .TP \fBSA_RESETHAND\fP 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. .IP \fBSA_ONESHOT\fP is an obsolete, nonstandard synonym for this flag. .TP \fBSA_RESTART\fP 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 \fBsignal\fP(7). .TP \fBSA_RESTORER\fP \fINie jest przeznaczone do bezpośredniego stosowania\fP. Flaga ta jest używana przez biblioteki C do wskazania, że pole \fIsa_restorer\fP zawiera adres "trampoliny sygnału" Więcej szczegółów w podręczniku \fBsigreturn\fP(2). .TP \fBSA_SIGINFO\fP (od Linuksa 2.2) .\" (The .\" .I sa_sigaction .\" field was added in Linux 2.1.86.) .\" Funkcja obsługi sygnałów pobiera trzy argumenty, a nie jeden. W typ przypadku zamiast ustawiać \fIsa_handler\fP należy ustawić \fIsa_sigaction\fP. Flaga ta ma znaczenie tylko w przypadku ustanawiania funkcji obsługi sygnału. .TP \fBSA_UNSUPPORTED\fP (od Linuksa 5.11) Used to dynamically probe for flag bit support. .IP If an attempt to register a handler succeeds with this flag set in \fIact\->sa_flags\fP alongside other flags that are potentially unsupported by the kernel, and an immediately subsequent \fBsigaction\fP() call specifying the same signal number and with a non\-NULL \fIoldact\fP argument yields \fBSA_UNSUPPORTED\fP \fIclear\fP in \fIoldact\->sa_flags\fP, then \fIoldact\->sa_flags\fP 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. .TP \fBSA_EXPOSE_TAGBITS\fP (od Linuksa 5.11) Normally, when delivering a signal, an architecture\-specific set of tag bits are cleared from the \fIsi_addr\fP field of \fIsiginfo_t\fP. If this flag is set, an architecture\-specific subset of the tag bits will be preserved in \fIsi_addr\fP. .IP Programs that need to be compatible with Linux versions older than 5.11 must use \fBSA_UNSUPPORTED\fP to probe for support. .SS "The siginfo_t argument to a SA_SIGINFO handler" When the \fBSA_SIGINFO\fP flag is specified in \fIact.sa_flags\fP, the signal handler address is passed via the \fIact.sa_sigaction\fP field. This handler takes three arguments, as follows: .PP .in +4n .EX void handler(int sig, siginfo_t *info, void *ucontext) { ... } .EE .in .PP These three arguments are as follows .TP \fIsig\fP The number of the signal that caused invocation of the handler. .TP \fIinfo\fP A pointer to a \fIsiginfo_t\fP, which is a structure containing further information about the signal, as described below. .TP \fIucontext\fP This is a pointer to a \fIucontext_t\fP structure, cast to \fIvoid\ *\fP. 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 \fBsigreturn\fP(2). Further information about the \fIucontext_t\fP structure can be found in \fBgetcontext\fP(3) and \fBsignal\fP(7). Commonly, the handler function doesn't make any use of the third argument. .PP The \fIsiginfo_t\fP data type is a structure with the following fields: .PP .in +4n .EX .\" FIXME .\" The siginfo_t 'si_trapno' field seems to be used .\" only on SPARC and Alpha; this page could use .\" a little more detail on its purpose there. .\" In the kernel: si_tid 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ł \fIint\fP 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) */ } .EE .in .PP \fIsi_signo\fP, \fIsi_errno\fP i \fIsi_code\fP są zdefiniowane dla wszystkich sygnałów. (Generalnie \fIsi_errno\fP nie jest używane pod Linuksem). Pozostałe pola struktury mogą być unią; powinno się odczytywać tylko pola istotne dla danego sygnału. .IP \[bu] 3 Sygnały wysłane przez \fBkill\fP(2) i \fBsigqueue\fP(3) mają wypełnione pola \fIsi_pid\fP oraz \fIsi_uid\fP. Dodatkowo sygnały wysłane przez \fBsigqueue\fP(3) mają w polach \fIsi_int\fP i \fIsi_ptr\fP ustawione wartości podane przez nadawcę sygnału; szczegóły opisano w \fBsigqueue\fP(3). .IP \[bu] Sygnały wysłane przez timery POSIX.1b (od Linuksa 2.6) mają uzupełnione pola \fIsi_overrun\fP i \fIsi_timerid\fP. Pole \fIsi_timerid\fP zawiera wewnętrzny identyfikator używany przez jądro do identyfikacji timera; nie jest to ten sam identyfikator, który zwraca \fBtimer_create\fP(2). Pole \fIsi_overrun\fP zawiera informację o tym, ile razy timer się przepełnił \(em jest to ta sama informacja, którą zwraca \fBtimer_getoverrun\fP(2). Pola te są niestandardowymi rozszerzeniami Linuksa. .IP \[bu] Sygnały wysłane w celu notyfikacji kolejki komunikatów (patrz opis \fBSIGEV_SIGNAL\fP in \fBmq_notify\fP(3)) mają pola \fIsi_int\fP/\fIsi_ptr\fP wypełnione wartościami \fIsigev_value\fP przekazanymi do \fBmq_notify\fP(3); ponadto \fIsi_pid\fP zawiera identyfikator procesu wysyłającego sygnał, a \fIsi_uid\fP rzeczywisty identyfikator użytkownika \- nadawcy sygnału. .IP \[bu] .\" FIXME . .\" When si_utime and si_stime where originally implemented, the .\" measurement unit was HZ, which was the same as clock ticks .\" (sysconf(_SC_CLK_TCK)). In Linux 2.6, HZ became configurable, and .\" was *still* used as the unit to return the info these fields, .\" with the result that the field values depended on the .\" configured HZ. Of course, the should have been measured in .\" USER_HZ instead, so that sysconf(_SC_CLK_TCK) could be used to .\" convert to seconds. I have a queued patch to fix this: .\" http://thread.gmane.org/gmane.linux.kernel/698061/ . .\" This patch made it into Linux 2.6.27. .\" But note that these fields still don't return the times of .\" waited-for children (as is done by getrusage() and times() .\" and wait4()). Solaris 8 does include child times. \fBSIGCHLD\fP fills in \fIsi_pid\fP, \fIsi_uid\fP, \fIsi_status\fP, \fIsi_utime\fP, and \fIsi_stime\fP, providing information about the child. The \fIsi_pid\fP field is the process ID of the child; \fIsi_uid\fP is the child's real user ID. The \fIsi_status\fP field contains the exit status of the child (if \fIsi_code\fP is \fBCLD_EXITED\fP), or the signal number that caused the process to change state. The \fIsi_utime\fP and \fIsi_stime\fP 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 \fBgetrusage\fP(2) and \fBtimes\fP(2)). Up to Linux 2.6, and since Linux 2.6.27, these fields report CPU time in units of \fIsysconf(_SC_CLK_TCK)\fP. 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 \fBtime\fP(7)). .IP \[bu] \fBSIGILL\fP, \fBSIGFPE\fP, \fBSIGSEGV\fP, \fBSIGBUS\fP oraz \fBSIGTRAP\fP wypełniają pole \fIsi_addr\fP, ustawiając w nim adres błędu. Na niektórych architekturach sygnały wypełniają także pole \fIsi_trapno\fP. .IP Niektóre błędy pochodne \fBSIGBUS\fP, w szczególności \fBBUS_MCEERR_AO\fP i \fBBUS_MCEERR_AR\fP ustawiają także \fIsi_addr_lsb\fP. Pole to oznacza najmniej znaczący bit adresu, zatem i rozmiary uszkodzeń. Na przykład jeśli cała strona została uszkodzona, \fIsi_addr_lsb\fP zawierać będzie \fIlog2(sysconf(_SC_PAGESIZE))\fP. Gdy jako odpowiedź na zdarzenie \fBptrace\fP(2) (PTRACE_EVENT_foo) zostanie dostarczony \fBSIGTRAP\fP, pole \fIsi_addr\fP nie jest wypełnione, natomiast pola \fIsi_pid\fP i \fIsi_uid\fP są wypełnione identyfikatorami odpowiednio procesu i użytkownika odpowiedzialnego za dostarczenie pułapki. W przypadku \fBseccomp\fP(2) jako dostarczenie zdarzenia pokazany zostanie zrzut. \fBBUS_MCERR_*\fP i \fIsi_addr_lsb\fP są rozszerzeniami specyficznymi dla Linuksa. .IP \fBSEGV_BNDERR\fP będący podbłędem \fBSIGSEGV\fP wypełnia pola \fIsi_lower\fP i \fIsi_upper\fP. .IP \fBSEGV_PKUERR\fP będący podbłędem \fBSIGSEGV\fP wypełnia pole \fIsi_pkey\fP. .IP \[bu] \fBSIGIO\fP/\fBSIGPOLL\fP (te dwie nazwy są synonimami pod Linuksem) wypełnia pola \fIsi_band\fP i \fIsi_fd\fP. Zdarzenie \fIsi_band\fP jest maską bitową zawierającą te same wartości, które \fBpoll\fP(2) umieszcza w polu \fIrevents\fP. Pole \fIsi_fd\fP oznacza deskryptor pliku, na którym wystąpiło dane zdarzenie wejścia/wyjścia; więcej szczegółów w opisie \fBF_SETSIG\fP w podręczniku \fBfcntl\fP(2). .IP \[bu] .\" commit a0727e8ce513fe6890416da960181ceb10fbfae6 .\" \fBSIGSYS\fP, generowany (od Linuksa 3.5) gdy filtr seccomp zwróci \fBSECCOMP_RET_TRAP\fP, wypełnia pola \fIsi_call_addr\fP, \fIsi_syscall\fP, \fIsi_arch\fP, \fIsi_errno\fP i inne, zgodnie z opisem z \fBseccomp\fP(2). .SS "The si_code field" The \fIsi_code\fP field inside the \fIsiginfo_t\fP argument that is passed to a \fBSA_SIGINFO\fP signal handler is a value (not a bit mask) indicating why this signal was sent. For a \fBptrace\fP(2) event, \fIsi_code\fP will contain \fBSIGTRAP\fP and have the ptrace event in the high byte: .PP .in +4n .EX (SIGTRAP | PTRACE_EVENT_foo << 8). .EE .in .PP For a non\-\fBptrace\fP(2) event, the values that can appear in \fIsi_code\fP are described in the remainder of this section. Since glibc 2.20, the definitions of most of these symbols are obtained from \fI\fP by defining feature test macros (before including \fIany\fP header file) as follows: .IP \[bu] 3 \fB_XOPEN_SOURCE\fP with the value 500 or greater; .IP \[bu] \fB_XOPEN_SOURCE\fP and \fB_XOPEN_SOURCE_EXTENDED\fP; or .IP \[bu] \fB_POSIX_C_SOURCE\fP with the value 200809L or greater. .PP For the \fBTRAP_*\fP 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. .PP W przypadku zwykłego sygnału, poniżej zestawiono wartości, które mogą występować w \fIsi_code\fP dowolnego sygnału razem z powodami, dla których sygnał był wygenerowany. .RS 4 .TP \fBSI_USER\fP \fBkill\fP(2). .TP \fBSI_KERNEL\fP Wysyłany przez jądro. .TP \fBSI_QUEUE\fP \fBsigqueue\fP(3). .TP \fBSI_TIMER\fP Wygaśnięcie timera POSIX. .TP \fBSI_MESGQ\fP (od Linuksa 2.6.6) Zmiana stanu kolejki komunikatów POSIX; patrz \fBmq_notify\fP(3) .TP \fBSI_ASYNCIO\fP Ukończenie asynchronicznej operacji wejścia/wyjścia. .TP \fBSI_SIGIO\fP Queued \fBSIGIO\fP (only up to Linux 2.2; from Linux 2.4 onward \fBSIGIO\fP/\fBSIGPOLL\fP fills in \fIsi_code\fP as described below). .TP \fBSI_TKILL\fP (od Linuksa 2.4.19) .\" SI_DETHREAD is defined in Linux 2.6.9 sources, but isn't implemented .\" It appears to have been an idea that was tried during 2.5.6 .\" through to Linux 2.5.24 and then was backed out. \fBtkill\fP(2) lub \fBtgkill\fP(2) .RE .PP Następujące wartości mogą zostać umieszczone w \fIsi_code\fP sygnału \fBSIGILL\fP: .RS 4 .TP \fBILL_ILLOPC\fP Niedozwolony kod operacji. .TP \fBILL_ILLOPN\fP Niedozwolony operand. .TP \fBILL_ILLADR\fP Niedozwolony tryb adresowania. .TP \fBILL_ILLTRP\fP Niedozwolona pułapka. .TP \fBILL_PRVOPC\fP Uprzywilejowany kod operacji. .TP \fBILL_PRVREG\fP Uprzywilejowany rejestr. .TP \fBILL_COPROC\fP Błąd koprocesora. .TP \fBILL_BADSTK\fP Wewnętrzny błąd stosu. .RE .PP Następujące wartości mogą zostać umieszczone w \fIsi_code\fP sygnału \fBSIGFPE\fP: .RS 4 .TP \fBFPE_INTDIV\fP Dzielenie wartości całkowitej przez zero. .TP \fBFPE_INTOVF\fP Przepełnienie liczby całkowitej. .TP \fBFPE_FLTDIV\fP Dzielenie wartości zmiennoprzecinkowej przez zero. .TP \fBFPE_FLTOVF\fP Przekroczenie zakresu operacji zmiennoprzecinkowej. .TP \fBFPE_FLTUND\fP Przekroczenie (w dół) zakresu operacji zmiennoprzecinkowej. .TP \fBFPE_FLTRES\fP Niedokładny wynik operacji zmiennoprzecinkowej. .TP \fBFPE_FLTINV\fP Niepoprawna operacja zmiennoprzecinkowa. .TP \fBFPE_FLTSUB\fP Dolny indeks poza zakresem. .RE .PP Następujące wartości mogą zostać umieszczone w \fIsi_code\fP sygnału \fBSIGSEGV\fP: .RS 4 .TP \fBSEGV_MAPERR\fP Adres niemapowany do obiektu. .TP \fBSEGV_ACCERR\fP Niepoprawne uprawnienia mapowanego obiektu. .TP \fBSEGV_BNDERR\fP (od Linuksa 3.19) .\" commit ee1b58d36aa1b5a79eaba11f5c3633c88231da83 Niepowodzenie sprawdzenia przypisania adresu. .TP \fBSEGV_PKUERR\fP (od Linuksa 4.6) .\" commit cd0ea35ff5511cde299a61c21a95889b4a71464e Access was denied by memory protection keys. See \fBpkeys\fP(7). The protection key which applied to this access is available via \fIsi_pkey\fP. .RE .PP Następujące wartości mogą zostać umieszczone w \fIsi_code\fP sygnału \fBSIGBUS\fP: .RS 4 .TP \fBBUS_ADRALN\fP Niepoprawne wyrównanie adresu. .TP \fBBUS_ADRERR\fP Nieistniejący adres fizyczny. .TP \fBBUS_OBJERR\fP Błąd sprzętowy specyficzny dla obiektu. .TP \fBBUS_MCEERR_AR\fP (od Linuksa 2.6.32) Sprzętowy błąd pamięci podczas sprawdzania komputera; wymagane podjęcie akcji. .TP \fBBUS_MCEERR_AO\fP (od Linuksa 2.6.32) Wykryto sprzętowy błąd pamięci w procesie; opcjonalne podjęcie akcji. .RE .PP Następujące wartości mogą zostać umieszczone w \fIsi_code\fP sygnału \fBSIGTRAP\fP: .RS 4 .TP \fBTRAP_BRKPT\fP Punkt wstrzymania procesu. .TP \fBTRAP_TRACE\fP Śledzony proces złapany. .TP \fBTRAP_BRANCH\fP (od Linuksa 2.4, tylko IA64) Śledzone rozgałęzienie procesu złapane. .TP \fBTRAP_HWBKPT\fP (od Linuksa 2.4, tylko IA64) Pułapka sprzętowa. .RE .PP Następujące wartości mogą zostać umieszczone w \fIsi_code\fP sygnału \fBSIGCHLD\fP: .RS 4 .TP \fBCLD_EXITED\fP Proces potomny się zakończył. .TP \fBCLD_KILLED\fP Proces potomny został zabity. .TP \fBCLD_DUMPED\fP Potomek zakończył się w nieprawidłowy sposób. .TP \fBCLD_TRAPPED\fP Śledzony potomek został złapany. .TP \fBCLD_STOPPED\fP Proces potomny został zatrzymany. .TP \fBCLD_CONTINUED\fP (od Linuksa 2.6.9) Zatrzymany proces potomny został wznowiony. .RE .PP Następujące wartości mogą zostać umieszczone w \fIsi_code\fP sygnału \fBSIGIO\fP/\fBSIGPOLL\fP: .RS 4 .TP \fBPOLL_IN\fP Dostępne dane na wejściu. .TP \fBPOLL_OUT\fP Dostępne bufory wyjścia. .TP \fBPOLL_MSG\fP Dostępna wiadomość na wejściu. .TP \fBPOLL_ERR\fP Błąd wejścia/wyjścia. .TP \fBPOLL_PRI\fP Dostępne wejście o wysokim priorytecie. .TP \fBPOLL_HUP\fP Urządzenie odłączone. .RE .PP Następująca wartość może zostać umieszczona w \fIsi_code\fP sygnału \fBSIGSYS\fP: .RS 4 .TP \fBSYS_SECCOMP\fP (od Linuksa 3.5) Wyzwolone przez regułę filtra \fBseccomp\fP(2). .RE .SS "Dynamically probing for flag bit support" The \fBsigaction\fP() call on Linux accepts unknown bits set in \fIact\->sa_flags\fP without error. The behavior of the kernel starting with Linux 5.11 is that a second \fBsigaction\fP() will clear unknown bits from \fIoldact\->sa_flags\fP. However, historically, a second \fBsigaction\fP() call would typically leave those bits set in \fIoldact\->sa_flags\fP. .PP This means that support for new flags cannot be detected simply by testing for a flag in \fIsa_flags\fP, and a program must test that \fBSA_UNSUPPORTED\fP has been cleared before relying on the contents of \fIsa_flags\fP. .PP 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 \fBsigaction\fP() in the signal handler itself. .PP 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 \fIact\->sa_flags\fP. .PP The flags \fBSA_NOCLDSTOP\fP, \fBSA_NOCLDWAIT\fP, \fBSA_SIGINFO\fP, \fBSA_ONSTACK\fP, \fBSA_RESTART\fP, \fBSA_NODEFER\fP, \fBSA_RESETHAND\fP, and, if defined by the architecture, \fBSA_RESTORER\fP 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. .PP See EXAMPLES below for a demonstration of the use of \fBSA_UNSUPPORTED\fP. .SH "WARTOŚĆ ZWRACANA" \fBsigaction\fP() w przypadku powodzenia zwraca 0. W razie wystąpienia błędu zwracane jest \-1 i ustawiana jest zmienna \fIerrno\fP wskazując na błąd. .SH BŁĘDY .TP \fBEFAULT\fP \fIact\fP lub \fIoldact\fP wskazują na pamięć poza przestrzenią adresową procesu. .TP \fBEINVAL\fP Podano nieprawidłowy sygnał. Będzie to też generowane w przypadku próby zmienienia akcji dla sygnałów \fBSIGKILL\fP lub \fBSIGSTOP\fP, które nie mogą być przechwycone lub zignorowane. .SH STANDARDY .\" SVr4 does not document the EINTR condition. POSIX.1\-2001, POSIX.1\-2008, SVr4. .SH UWAGI Dziecko utworzone przez \fBfork\fP(2) dziedziczy kopię ustawień sygnałów od swojego rodzica. Podczas wywołania \fBexecve\fP(2) przywracane są wartości domyślne ustawień, z wyjątkiem ustawienia ignorowania sygnału, które nie jest zmieniane. .PP Zgodnie z POSIX, zachowanie procesu po zignorowaniu sygnału \fBSIGFPE\fP, \fBSIGILL\fP lub \fBSIGSEGV\fP, niewygenerowanego przez \fBkill\fP(2) lub \fBraise\fP(3), jest niezdefiniowane. Dzielenie liczby całkowitej przez zero ma wynik niezdefiniowany. Na niektórych architekturach generuje sygnał \fBSIGFPE\fP (Także dzielenie najmniejszej ujemnej liczby całkowitej przez \-1 może wygenerować \fBSIGFPE\fP). Ignorowanie go może prowadzić do nieskończonej pętli. .PP POSIX.1\-1990 zabraniał ustawiania akcji dla \fBSIGCHLD\fP na \fBSIG_IGN\fP. POSIX.1\-2001 i późniejsze pozwalają na to, tak że można użyć ignorowania \fBSIGCHLD\fP, żeby zapobiec tworzeniu procesów\-duchów (patrz \fBwait\fP(2)). Niemniej jednak, historyczne zachowanie systemów BSD i System\ V w zakresie ignorowania \fBSIGCHLD\fP 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 \fBSIGCHLD\fP i wywołanie funkcji \fBwait\fP(2) lub podobnej. .PP POSIX.1\-1990 określał tylko \fBSA_NOCLDSTOP\fP. W POSIX.1\-2001 dodano \fBSA_NOCLDSTOP\fP, \fBSA_NOCLDWAIT\fP, \fBSA_NODEFER\fP, \fBSA_ONSTACK\fP, \fBSA_RESETHAND\fP, \fBSA_RESTART\fP oraz \fBSA_SIGINFO\fP. Używanie tych nowych wartości \fIsa_flags\fP może być mniej przenośne w aplikacjach przewidzianych do użycia w starszych implementacjach Uniksa. .PP Flaga \fBSA_RESETHAND\fP jest kompatybilna z flagą w SVr4 o tej samej nazwie. .PP The \fBSA_NODEFER\fP 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 \fIsa_mask\fP settings). .PP \fBsigaction\fP() 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. .PP Nie można zablokować sygnałów \fBSIGKILL\fP lub \fBSIGSTOP\fP (przez podanie ich w \fIsa_mask\fP). Próby takie zostaną zignorowane. .PP Zobacz \fBsigsetops\fP(3) dla szczegółów o operacjach na zbiorach sygnałów. .PP .\" Listę funkcji, które można bezpiecznie wywołać w procedurze obsługi sygnału, można znaleźć w podręczniku \fBsignal\-safety\fP(7). .SS "Różnice biblioteki C/jądra" Funkcja opakowująca glibc dla \fBsigaction\fP() daje błąd (\fBEINVAL\fP) 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 \fBnptl\fP(7). .PP On architectures where the signal trampoline resides in the C library, the glibc wrapper function for \fBsigaction\fP() places the address of the trampoline code in the \fIact.sa_restorer\fP field and sets the \fBSA_RESTORER\fP flag in the \fIact.sa_flags\fP field. See \fBsigreturn\fP(2). .PP .\" Oryginalne linuksowe wywołanie systemowe nazywało się \fBsigaction\fP(). Jednak po pojawieniu się sygnałów czasu rzeczywistego w Linuksie 2.2, 32\-bitowy typ \fIsigset_t\fP 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 \fIsigset_t\fP dodano nowe wywołanie systemowe \fBrt_sigaction\fP(). Nowe wywołanie przyjmuje czwarty argument \fIsize_t sigsetsize\fP, który określa rozmiar w bajtach zestawu sygnałów w \fIact.sa_mask\fP i \fIoldact.sa_mask\fP. Argument ten obecnie musi mieć wartość \fIsizeof(sigset_t)\fP (albo nastąpi błąd \fBEINVAL\fP). Opakowanie glibc \fBsigaction\fP() ukrywa te detale przed nami, po cichu wywołując \fBrt_sigaction\fP() jeśli udostępnia je jądro. .SS Nieudokumentowane Before the introduction of \fBSA_SIGINFO\fP, it was also possible to get some additional information about the signal. This was done by providing an \fIsa_handler\fP signal handler with a second argument of type \fIstruct sigcontext\fP, which is the same structure as the one that is passed in the \fIuc_mcontext\fP field of the \fIucontext\fP structure that is passed (via a pointer) in the third argument of the \fIsa_sigaction\fP handler. See the relevant Linux kernel sources for details. This use is obsolete now. .SH BŁĘDY When delivering a signal with a \fBSA_SIGINFO\fP handler, the kernel does not always provide meaningful values for all of the fields of the \fIsiginfo_t\fP that are relevant for that signal. .PP .\" commit 69be8f189653cd81aae5a74e26615b12871bb72e Up to and including Linux 2.6.13, specifying \fBSA_NODEFER\fP in \fIsa_flags\fP prevents not only the delivered signal from being masked during execution of the handler, but also the signals specified in \fIsa_mask\fP. This bug was fixed in Linux 2.6.14. .SH PRZYKŁADY Patrz \fBmprotect\fP(2). .SS "Probing for flag support" The following example program exits with status \fBEXIT_SUCCESS\fP if \fBSA_EXPOSE_TAGBITS\fP is determined to be supported, and \fBEXIT_FAILURE\fP otherwise. .PP .\" SRC BEGIN (sigaction.c) .EX #include #include #include #include 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); } .EE .\" SRC END .SH "ZOBACZ TAKŻE" \fBkill\fP(1), \fBkill\fP(2), \fBpause\fP(2), \fBpidfd_send_signal\fP(2), \fBrestart_syscall\fP(2), \fBseccomp\fP(2), \fBsigaltstack\fP(2), \fBsignal\fP(2), \fBsignalfd\fP(2), \fBsigpending\fP(2), \fBsigprocmask\fP(2), \fBsigreturn\fP(2), \fBsigsuspend\fP(2), \fBwait\fP(2), \fBkillpg\fP(3), \fBraise\fP(3), \fBsiginterrupt\fP(3), \fBsigqueue\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBcore\fP(5), \fBsignal\fP(7) .PP .SH TŁUMACZENIE Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Przemek Borys , Robert Luberda i Michał Kułach . .PP Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License w wersji 3 .UE lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI. .PP Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej .MT manpages-pl-list@lists.sourceforge.net .ME .