]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/signal.2
mmap.2: Don't mark MAP_ANON as deprecated
[thirdparty/man-pages.git] / man2 / signal.2
CommitLineData
fea681da 1.\" Copyright (c) 2000 Andries Brouwer <aeb@cwi.nl>
c11b1abf 2.\" and Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
7a810552 3.\" and Copyright (c) 2008, Linux Foundation, written by Michael Kerrisk
0d568afb 4.\" <mtk.manpages@gmail.com>
fea681da
MK
5.\" based on work by Rik Faith <faith@cs.unc.edu>
6.\" and Mike Battersby <mike@starbug.apana.org.au>.
7.\"
93015253 8.\" %%%LICENSE_START(VERBATIM)
fea681da
MK
9.\" Permission is granted to make and distribute verbatim copies of this
10.\" manual provided the copyright notice and this permission notice are
11.\" preserved on all copies.
12.\"
13.\" Permission is granted to copy and distribute modified versions of this
14.\" manual under the conditions for verbatim copying, provided that the
15.\" entire resulting derived work is distributed under the terms of a
16.\" permission notice identical to this one.
c13182ef 17.\"
fea681da
MK
18.\" Since the Linux kernel and libraries are constantly changing, this
19.\" manual page may be incorrect or out-of-date. The author(s) assume no
20.\" responsibility for errors or omissions, or for damages resulting from
21.\" the use of the information contained herein. The author(s) may not
22.\" have taken the same level of care in the production of this manual,
23.\" which is licensed free of charge, as they might when working
24.\" professionally.
c13182ef 25.\"
fea681da
MK
26.\" Formatted or processed versions of this manual, if unaccompanied by
27.\" the source, must acknowledge the copyright and authors of this work.
4b72fb64 28.\" %%%LICENSE_END
fea681da 29.\"
c13182ef
MK
30.\" Modified 2004-11-19, mtk:
31.\" added pointer to sigaction.2 for details of ignoring SIGCHLD
98e1ece3 32.\" 2007-06-03, mtk: strengthened portability warning, and rewrote
218d23e5 33.\" various sections.
98e1ece3 34.\" 2008-07-11, mtk: rewrote and expanded portability discussion.
197362df 35.\"
4b8c67d9 36.TH SIGNAL 2 2017-09-15 "Linux" "Linux Programmer's Manual"
fea681da
MK
37.SH NAME
38signal \- ANSI C signal handling
39.SH SYNOPSIS
40.B #include <signal.h>
3d113fbf 41.PP
fea681da 42.B typedef void (*sighandler_t)(int);
3d113fbf 43.PP
fea681da
MK
44.BI "sighandler_t signal(int " signum ", sighandler_t " handler );
45.SH DESCRIPTION
988db661 46The behavior of
bc0d5df3 47.BR signal ()
008f1ecc 48varies across UNIX versions,
bc0d5df3
MK
49and has also varied historically across different versions of Linux.
50\fBAvoid its use\fP: use
51.BR sigaction (2)
52instead.
53See \fIPortability\fP below.
3d113fbf 54.PP
fea681da 55.BR signal ()
218d23e5 56sets the disposition of the signal
0daa9e92 57.I signum
218d23e5
MK
58to
59.IR handler ,
60which is either
61.BR SIG_IGN ,
62.BR SIG_DFL ,
fc15ae54 63or the address of a programmer-defined function (a "signal handler").
3d113fbf 64.PP
218d23e5 65If the signal
fea681da 66.I signum
218d23e5
MK
67is delivered to the process, then one of the following happens:
68.TP 3
69*
70If the disposition is set to
fea681da
MK
71.BR SIG_IGN ,
72then the signal is ignored.
218d23e5
MK
73.TP
74*
75If the disposition is set to
fea681da 76.BR SIG_DFL ,
99d2b7a2 77then the default action associated with the signal (see
fea681da
MK
78.BR signal (7))
79occurs.
218d23e5
MK
80.TP
81*
82If the disposition is set to a function,
83then first either the disposition is reset to
84.BR SIG_DFL ,
85or the signal is blocked (see \fIPortability\fP below), and then
f9212394 86.I handler
fea681da
MK
87is called with argument
88.IR signum .
eb1af896 89If invocation of the handler caused the signal to be blocked,
218d23e5
MK
90then the signal is unblocked upon return from the handler.
91.PP
fea681da
MK
92The signals
93.B SIGKILL
94and
95.B SIGSTOP
96cannot be caught or ignored.
47297adb 97.SH RETURN VALUE
fea681da 98.BR signal ()
bc0d5df3 99returns the previous value of the signal handler, or
fea681da
MK
100.B SIG_ERR
101on error.
125db7c1
MK
102In the event of an error,
103.I errno
104is set to indicate the cause.
218d23e5
MK
105.SH ERRORS
106.TP
107.B EINVAL
108.I signum
109is invalid.
47297adb 110.SH CONFORMING TO
8cbeada3 111POSIX.1-2001, POSIX.1-2008, C89, C99.
fea681da 112.SH NOTES
988db661 113The effects of
218d23e5 114.BR signal ()
71fea607 115in a multithreaded process are unspecified.
fea681da 116.PP
d9bfdb9c 117According to POSIX, the behavior of a process is undefined after it
fea681da
MK
118ignores a
119.BR SIGFPE ,
120.BR SIGILL ,
121or
122.B SIGSEGV
bc0d5df3 123signal that was not generated by
fea681da 124.BR kill (2)
fc15ae54 125or
bc0d5df3 126.BR raise (3).
fea681da
MK
127Integer division by zero has undefined result.
128On some architectures it will generate a
129.B SIGFPE
130signal.
131(Also dividing the most negative integer by \-1 may generate
132.BR SIGFPE .)
133Ignoring this signal might lead to an endless loop.
134.PP
197362df
MK
135See
136.BR sigaction (2)
2101b953 137for details on what happens when the disposition
fea681da
MK
138.B SIGCHLD
139is set to
140.BR SIG_IGN .
fea681da 141.PP
7f82d75e 142See
d0778028 143.BR signal-safety (7)
988db661 144for a list of the async-signal-safe functions that can be
98e1ece3 145safely called from inside a signal handler.
7f82d75e 146.PP
fea681da 147The use of
66ee0c7e 148.I sighandler_t
2606a2b0 149is a GNU extension, exposed if
fea681da 150.B _GNU_SOURCE
2606a2b0
MK
151is defined;
152.\" libc4 and libc5 define
153.\" .IR SignalHandler ;
154glibc also defines (the BSD-derived)
155.I sig_t
156if
157.B _BSD_SOURCE
f8e7625c
MK
158(glibc 2.19 and earlier)
159or
160.BR _DEFAULT_SOURCE
161(glibc 2.19 and later)
2606a2b0 162is defined.
98e1ece3
MK
163Without use of such a type, the declaration of
164.BR signal ()
165is the somewhat harder to read:
3d113fbf 166.PP
98e1ece3 167.in +4n
b8302363 168.EX
98e1ece3 169.BI "void ( *" signal "(int " signum ", void (*" handler ")(int)) ) (int);"
b8302363 170.EE
98e1ece3 171.in
8c87824d 172.SS Portability
98e1ece3
MK
173The only portable use of
174.BR signal ()
175is to set a signal's disposition to
176.BR SIG_DFL
177or
178.BR SIG_IGN .
179The semantics when using
8c87824d 180.BR signal ()
98e1ece3
MK
181to establish a signal handler vary across systems
182(and POSIX.1 explicitly permits this variation);
183.B do not use it for this purpose.
3d113fbf 184.PP
98e1ece3
MK
185POSIX.1 solved the portability mess by specifying
186.BR sigaction (2),
187which provides explicit control of the semantics when a
188signal handler is invoked; use that interface instead of
189.BR signal ().
3d113fbf 190.PP
008f1ecc 191In the original UNIX systems, when a handler that was established using
98e1ece3
MK
192.BR signal ()
193was invoked by the delivery of a signal,
194the disposition of the signal would be reset to
8bd58774 195.BR SIG_DFL ,
98e1ece3 196and the system did not block delivery of further instances of the signal.
3659da5b
MK
197This is equivalent to calling
198.BR sigaction (2)
199with the following flags:
3d113fbf
MK
200.PP
201.EX
3659da5b 202 sa.sa_flags = SA_RESETHAND | SA_NODEFER;
3d113fbf
MK
203.EE
204.PP
efbfd7ec 205System\ V also provides these semantics for
98e1ece3
MK
206.BR signal ().
207This was bad because the signal might be delivered again
208before the handler had a chance to reestablish itself.
209Furthermore, rapid deliveries of the same signal could
210result in recursive invocations of the handler.
3d113fbf 211.PP
3659da5b
MK
212BSD improved on this situation, but unfortunately also
213changed the semantics of the existing
214.BR signal ()
215interface while doing so.
98e1ece3
MK
216On BSD, when a signal handler is invoked,
217the signal disposition is not reset,
218and further instances of the signal are blocked from
219being delivered while the handler is executing.
3659da5b
MK
220Furthermore, certain blocking system calls are automatically
221restarted if interrupted by a signal handler (see
222.BR signal (7)).
223The BSD semantics are equivalent to calling
224.BR sigaction (2)
225with the following flags:
3d113fbf
MK
226.PP
227.EX
3659da5b 228 sa.sa_flags = SA_RESTART;
3d113fbf
MK
229.EE
230.PP
98e1ece3
MK
231The situation on Linux is as follows:
232.IP * 2
233The kernel's
234.BR signal ()
efbfd7ec 235system call provides System\ V semantics.
98e1ece3
MK
236.IP *
237By default, in glibc 2 and later, the
238.BR signal ()
239wrapper function does not invoke the kernel system call.
240Instead, it calls
241.BR sigaction (2)
242using flags that supply BSD semantics.
f8e7625c
MK
243This default behavior is provided as long as a suitable
244feature test macro is defined:
98e1ece3 245.B _BSD_SOURCE
f8e7625c
MK
246on glibc 2.19 and earlier or
247.BR _DEFAULT_SOURCE
248in glibc 2.19 and later.
249(By default, these macros are defined; see
250.BR feature_test_macros (7)
251for details.)
252If such a feature test macro is not defined, then
98e1ece3 253.BR signal ()
efbfd7ec 254provides System\ V semantics.
fd7193f5 255.\"
98e1ece3
MK
256.\" System V semantics are also provided if one uses the separate
257.\" .BR sysv_signal (3)
258.\" function.
30a63ffa
MK
259.\" .IP *
260.\" The
261.\" .BR signal ()
262.\" function in Linux libc4 and libc5 provide System\ V semantics.
263.\" If one on a libc5 system includes
264.\" .I <bsd/signal.h>
265.\" instead of
266.\" .IR <signal.h> ,
267.\" then
268.\" .BR signal ()
269.\" provides BSD semantics.
47297adb 270.SH SEE ALSO
fea681da
MK
271.BR kill (1),
272.BR alarm (2),
273.BR kill (2),
fea681da
MK
274.BR pause (2),
275.BR sigaction (2),
058c1165 276.BR signalfd (2),
479377fb
MK
277.BR sigpending (2),
278.BR sigprocmask (2),
479377fb 279.BR sigsuspend (2),
d6d70cf9 280.BR bsd_signal (3),
498aad50 281.BR killpg (3),
fea681da 282.BR raise (3),
bc0d5df3 283.BR siginterrupt (3),
485ab701 284.BR sigqueue (3),
fea681da 285.BR sigsetops (3),
30ecea55 286.BR sigvec (3),
d6d70cf9 287.BR sysv_signal (3),
fea681da 288.BR signal (7)