.\" -*- coding: UTF-8 -*-
.\" Copyright (c) 2000 Andries Brouwer <aeb@cwi.nl>
.\" and Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
.\" and Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
.\"      <mtk.manpages@gmail.com>
.\" based on work by Rik Faith <faith@cs.unc.edu>
.\" and Mike Battersby <mike@starbug.apana.org.au>.
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.\" Modified 2004-11-19, mtk:
.\" added pointer to sigaction.2 for details of ignoring SIGCHLD
.\" 2007-06-03, mtk: strengthened portability warning, and rewrote
.\"     various sections.
.\" 2008-07-11, mtk: rewrote and expanded portability discussion.
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH signal 2 "2 maja 2024 r." "Linux man\-pages 6.8" 
.SH NAZWA
signal \- obsługa sygnałów ANSI C
.SH BIBLIOTEKA
Standardowa biblioteka C (\fIlibc\fP, \fI\-lc\fP)
.SH SKŁADNIA
.nf
\fB#include <signal.h>\fP
.P
\fBtypedef void (*sighandler_t)(int);\fP
.P
\fBsighandler_t signal(int \fP\fIsignum\fP\fB, sighandler_t \fP\fIhandler\fP\fB);\fP
.fi
.SH OPIS
\fBOSTRZEŻENIE\fP: zachowanie \fBsignal\fP() różni się pomiędzy wersjami Uniksa i
różniło się również historycznie, pomiędzy różnymi wersjami
Linuksa. \fBProszę go unikać\fP: należy korzystać z
\fBsigaction\fP(2). Zob. \fIPrzenośność\fP poniżej.
.P
\fBsignal\fP() ustawia dyspozycję sygnału \fIsignum\fP na \fIhandler\fP, które wynosi
\fBSIG_IGN\fP, \fBSIG_DFL\fP lub jest adresem funkcji zdefiniowanej przez
programistę (\[Bq]procedura obsługi sygnału\[rq]).
.P
Jeśli sygnał \fIsignum\fP jest dostarczany do procesu, to dzieje się jedna z
następujących rzeczy:
.TP  3
*
Jeśli dyspozycję ustawiono na \fBSIG_IGN\fP, to sygnał jest ignorowany.
.TP 
*
Jeśli dyspozycję ustawiono na \fBSIG_DFL\fP, to zachodzi domyślna akcja
przypisana sygnałowi (zob. \fBsignal\fP(7)).
.TP 
*
Jeśli dyspozycja jest ustawiona na funkcję, to na początku dyspozycja jest
resetowana na \fBSIG_DFL\fP, albo sygnał jest blokowany (zob. \fIPrzenośność\fP
poniżej), a następnie wywoływany jest \fIhandler\fP z argumentem
\fIsignum\fP. Jeśli przywołanie procedury obsługi sygnału powoduje zablokowanie
sygnału, to sygnał jest odblokowywany po powrocie z procedury obsługi.
.P
Sygnały \fBSIGKILL\fP i \fBSIGSTOP\fP nie mogą być ani przechwycone, ani
zignorowane.
.SH "WARTOŚĆ ZWRACANA"
\fBsignal\fP() zwraca poprzednią wartość procedury obsługi sygnału. W przypadku
błędu zwraca \fBSIG_ERR\fP i ustawia \fIerrno\fP wskazując błąd.
.SH BŁĘDY
.TP 
\fBEINVAL\fP
\fIsignum\fP jest nieprawidłowy.
.SH WERSJE
.\" libc4 and libc5 define
.\" .IR SignalHandler ;
Użycie \fIsighandler_t\fP jest rozszerzeniem GNU, które jest ujawnione, jeśli
zdefiniowano \fB_GNU_SOURCE\fP; glibc definiuje również (pochodzące z BSD)
\fIsig_t\fP, jeśli zdefiniowano \fB_BSD_SOURCE\fP (glibc 2.19 i wcześniejsze) lub
\fB_DEFAULT_SOURCE\fP (glibc 2.19 i późniejsze). Bez korzystania z takiego
typu, deklaracja \fBsignal\fP() jest nieco trudniejsza do odczytania:
.P
.in +4n
.EX
\fBvoid ( *\fP\fIsignal\fP\fB(int \fP\fIsignum\fP\fB, void (*\fP\fIhandler\fP\fB)(int)) ) (int);\fP
.EE
.in
.SS Przenośność
Jedynym przenośnym użyciem \fBsignal\fP() jest ustawienie dyspozycji sygnału na
\fBSIG_DFL\fP lub \fBSIG_IGN\fP. Semantyka korzystania z \fBsignal\fP() do
ustanowienia procedury obsługi sygnału różni się między systemami (i POSIX.1
wyraźnie zezwala na to zróżnicowanie); \fBproszę nie używać go do tego celu\fP.
.P
Norma POSIX.1 rozwiązała ten chaos związany z przenośnością, przez
ustanowienie \fBsigaction\fP(2), który zapewnia wyraźną kontrolę semantyki, gdy
przywoływana jest procedura obsługi sygnału; dlatego należy korzystać z tego
interfejsu, zamiast z \fBsignal\fP().
.SH STANDARDY
C11, POSIX.1\-2008.
.SH HISTORIA
C89, POSIX.1\-2001.
.P
W oryginalnych systemach UNIX, gdy przywołano obsługę sygnału, którą
ustanowiono za pomocą \fBsignal\fP(), dyspozycja sygnału była resetowana na
\fBSIG_DFL\fP, a system nie blokował dostarczania kolejnych wystąpień
sygnału. Jest to równoważne wywołaniu \fBsigaction\fP(2) z następującymi
znacznikami:
.P
.in +4n
.EX
sa.sa_flags = SA_RESETHAND | SA_NODEFER;
.EE
.in
.P
System\ V również udostępnia te semantyki \fBsignal\fP(). Nie było to dobre
rozwiązanie, ponieważ sygnał mógł być dostarczony ponownie, przed tym, jak
procedura obsługi sygnału zdążyła się ponownie zestawić. Co więcej, szybkie
wysyłanie tego samego sygnału, mogło skutkować rekurencyjnemu przywoływaniu
procedury obsługi.
.P
BSD poprawiło sytuację, lecz przy okazji zmieniło niestety również semantykę
interfejsu \fBsignal\fP(). W BSD, gdy przywoływana jest procedura obsługi
sygnału, dyspozycja sygnału nie jest resetowana, a kolejne dostarczanie
kolejnych wystąpień sygnału jest blokowane podczas wykonywania procedury
obsługi. Co więcej, niektóre blokujące wywołania systemowe są automatycznie
restartowane, jeśli zostaną przerwane przez procedurę obsługi sygnału
(zob. \fBsignal\fP(7)). Semantyka BSD jest równoważna wywołaniu \fBsigaction\fP(2)
z następującymi znacznikami:
.P
.in +4n
.EX
sa.sa_flags = SA_RESTART;
.EE
.in
.P
Sytuacja w Linuksie wygląda następująco:
.IP \[bu] 3
Wywołanie systemowe \fBsignal\fP() jądra udostępnia semantykę Systemu\ V.
.IP \[bu]
.\"
.\" System V semantics are also provided if one uses the separate
.\" .BR sysv_signal (3)
.\" function.
.\" .IP \[bu]
.\" The
.\" .BR signal ()
.\" function in Linux libc4 and libc5 provide System\ V semantics.
.\" If one on a libc5 system includes
.\" .I <bsd/signal.h>
.\" instead of
.\" .IR <signal.h> ,
.\" then
.\" .BR signal ()
.\" provides BSD semantics.
Domyślnie, w glibc 2 i późniejszych, funkcja opakowująca \fBsignal\fP() nie
przywołuje wywołania systemowego jądra. Zamiast tego wywołuje
\fBsigaction\fP(2) ze znacznikami zapewniającymi semantykę BSD. To domyślne
zachowanie jest udostępniane, jeśli zdefiniowano odpowiednie makro:
\fB_BSD_SOURCE\fP w glibc 2.19 i wcześniejszych lub \fB_DEFAULT_SOURCE\fP w glibc
2.19 i późniejszych (domyślnie makra te są zdefiniowanie, więcej szczegółów
w podręczniku \fBfeature_test_macros\fP(7)). Jeśli odpowiednie makro nie jest
zdefiniowane, to \fBsignal\fP() zapewnia semantykę Systemu\ V.
.SH UWAGI
Wpływ \fBsignal\fP() na procesy wielowątkowe jest niezdefiniowany.
.P
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.
.P
W podręczniku \fBsigaction\fP(2) opisano szczegóły tego, co dzieje się gdy
dyspozycję \fBSIGCHLD\fP ustawiono na \fBSIG_IGN\fP.
.P
Podręcznik \fBsignal\-safety\fP(7) zawiera listę funkcji async\-signal\-safe,
które można bezpiecznie wywołać z procedury obsługi sygnału.
.SH "ZOBACZ TAKŻE"
\fBkill\fP(1), \fBalarm\fP(2), \fBkill\fP(2), \fBpause\fP(2), \fBsigaction\fP(2),
\fBsignalfd\fP(2), \fBsigpending\fP(2), \fBsigprocmask\fP(2), \fBsigsuspend\fP(2),
\fBbsd_signal\fP(3), \fBkillpg\fP(3), \fBraise\fP(3), \fBsiginterrupt\fP(3),
\fBsigqueue\fP(3), \fBsigsetops\fP(3), \fBsigvec\fP(3), \fBsysv_signal\fP(3),
\fBsignal\fP(7)
.PP
.SH TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są:
Przemek Borys <pborys@dione.ids.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.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 .
