]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/signal.2
kill.2, sigaction.2, signal.2, credentials.7, signal.7: Change section number from...
[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.\"
97986708 36.TH SIGNAL 2 2016-03-15 "Linux" "Linux Programmer's Manual"
fea681da
MK
37.SH NAME
38signal \- ANSI C signal handling
39.SH SYNOPSIS
40.B #include <signal.h>
41.sp
42.B typedef void (*sighandler_t)(int);
43.sp
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.
54
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").
fea681da 64
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)
137for details on what happens when
fea681da
MK
138.B SIGCHLD
139is set to
140.BR SIG_IGN .
fea681da 141.PP
7f82d75e
MK
142See
143.BR signal (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:
166.in +4n
167.nf
168
169.BI "void ( *" signal "(int " signum ", void (*" handler ")(int)) ) (int);"
170.fi
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.
184
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 ().
190
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:
200
201 sa.sa_flags = SA_RESETHAND | SA_NODEFER;
202
efbfd7ec 203System\ V also provides these semantics for
98e1ece3
MK
204.BR signal ().
205This was bad because the signal might be delivered again
206before the handler had a chance to reestablish itself.
207Furthermore, rapid deliveries of the same signal could
208result in recursive invocations of the handler.
209
3659da5b
MK
210BSD improved on this situation, but unfortunately also
211changed the semantics of the existing
212.BR signal ()
213interface while doing so.
98e1ece3
MK
214On BSD, when a signal handler is invoked,
215the signal disposition is not reset,
216and further instances of the signal are blocked from
217being delivered while the handler is executing.
3659da5b
MK
218Furthermore, certain blocking system calls are automatically
219restarted if interrupted by a signal handler (see
220.BR signal (7)).
221The BSD semantics are equivalent to calling
222.BR sigaction (2)
223with the following flags:
224
225 sa.sa_flags = SA_RESTART;
8c87824d 226
98e1ece3
MK
227The situation on Linux is as follows:
228.IP * 2
229The kernel's
230.BR signal ()
efbfd7ec 231system call provides System\ V semantics.
98e1ece3
MK
232.IP *
233By default, in glibc 2 and later, the
234.BR signal ()
235wrapper function does not invoke the kernel system call.
236Instead, it calls
237.BR sigaction (2)
238using flags that supply BSD semantics.
f8e7625c
MK
239This default behavior is provided as long as a suitable
240feature test macro is defined:
98e1ece3 241.B _BSD_SOURCE
f8e7625c
MK
242on glibc 2.19 and earlier or
243.BR _DEFAULT_SOURCE
244in glibc 2.19 and later.
245(By default, these macros are defined; see
246.BR feature_test_macros (7)
247for details.)
248If such a feature test macro is not defined, then
98e1ece3 249.BR signal ()
efbfd7ec 250provides System\ V semantics.
fd7193f5 251.\"
98e1ece3
MK
252.\" System V semantics are also provided if one uses the separate
253.\" .BR sysv_signal (3)
254.\" function.
30a63ffa
MK
255.\" .IP *
256.\" The
257.\" .BR signal ()
258.\" function in Linux libc4 and libc5 provide System\ V semantics.
259.\" If one on a libc5 system includes
260.\" .I <bsd/signal.h>
261.\" instead of
262.\" .IR <signal.h> ,
263.\" then
264.\" .BR signal ()
265.\" provides BSD semantics.
47297adb 266.SH SEE ALSO
fea681da
MK
267.BR kill (1),
268.BR alarm (2),
269.BR kill (2),
fea681da
MK
270.BR pause (2),
271.BR sigaction (2),
058c1165 272.BR signalfd (2),
479377fb
MK
273.BR sigpending (2),
274.BR sigprocmask (2),
479377fb 275.BR sigsuspend (2),
d6d70cf9 276.BR bsd_signal (3),
498aad50 277.BR killpg (3),
fea681da 278.BR raise (3),
bc0d5df3 279.BR siginterrupt (3),
485ab701 280.BR sigqueue (3),
fea681da 281.BR sigsetops (3),
30ecea55 282.BR sigvec (3),
d6d70cf9 283.BR sysv_signal (3),
fea681da 284.BR signal (7)