2004-11-03 13:51:07 +00:00
|
|
|
.\" Copyright (c) 2000 Andries Brouwer <aeb@cwi.nl>
|
2007-09-20 06:52:22 +00:00
|
|
|
.\" and Copyright (c) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" based on work by Rik Faith <faith@cs.unc.edu>
|
|
|
|
.\" and Mike Battersby <mike@starbug.apana.org.au>.
|
|
|
|
.\"
|
|
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
|
|
.\" preserved on all copies.
|
|
|
|
.\"
|
|
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
|
|
.\" permission notice identical to this one.
|
2007-04-12 22:42:49 +00:00
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
|
|
.\" have taken the same level of care in the production of this manual,
|
|
|
|
.\" which is licensed free of charge, as they might when working
|
|
|
|
.\" professionally.
|
2007-04-12 22:42:49 +00:00
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
|
|
.\"
|
2007-04-12 22:42:49 +00:00
|
|
|
.\" Modified 2004-11-19, mtk:
|
|
|
|
.\" added pointer to sigaction.2 for details of ignoring SIGCHLD
|
2007-05-27 21:33:14 +00:00
|
|
|
.\" 2007-06-03, mtk: strengthened portability warning, and rerote
|
|
|
|
.\" various sections.
|
2004-11-19 17:34:32 +00:00
|
|
|
.\"
|
2007-05-27 21:03:48 +00:00
|
|
|
.TH SIGNAL 2 2007-06-03 "Linux" "Linux Programmer's Manual"
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NAME
|
|
|
|
signal \- ANSI C signal handling
|
|
|
|
.SH SYNOPSIS
|
|
|
|
.B #include <signal.h>
|
|
|
|
.sp
|
|
|
|
.B typedef void (*sighandler_t)(int);
|
|
|
|
.sp
|
|
|
|
.BI "sighandler_t signal(int " signum ", sighandler_t " handler );
|
|
|
|
.SH DESCRIPTION
|
2007-06-21 22:55:04 +00:00
|
|
|
The behavior of
|
2007-05-27 21:03:48 +00:00
|
|
|
.BR signal ()
|
|
|
|
varies across Unix versions,
|
|
|
|
and has also varied historically across different versions of Linux.
|
|
|
|
\fBAvoid its use\fP: use
|
|
|
|
.BR sigaction (2)
|
|
|
|
instead.
|
|
|
|
See \fIPortability\fP below.
|
|
|
|
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR signal ()
|
2007-05-27 21:33:14 +00:00
|
|
|
sets the disposition of the signal
|
2007-09-20 16:26:31 +00:00
|
|
|
.I signum
|
2007-05-27 21:33:14 +00:00
|
|
|
to
|
|
|
|
.IR handler ,
|
|
|
|
which is either
|
|
|
|
.BR SIG_IGN ,
|
|
|
|
.BR SIG_DFL ,
|
2007-07-10 03:57:50 +00:00
|
|
|
or the address of a programmer-defined function (a "signal handler").
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2007-05-27 21:33:14 +00:00
|
|
|
If the signal
|
2004-11-03 13:51:07 +00:00
|
|
|
.I signum
|
2007-05-27 21:33:14 +00:00
|
|
|
is delivered to the process, then one of the following happens:
|
|
|
|
.TP 3
|
|
|
|
*
|
|
|
|
If the disposition is set to
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR SIG_IGN ,
|
|
|
|
then the signal is ignored.
|
2007-05-27 21:33:14 +00:00
|
|
|
.TP
|
|
|
|
*
|
|
|
|
If the disposition is set to
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR SIG_DFL ,
|
2004-12-13 08:40:20 +00:00
|
|
|
then the default action associated with the signal (see
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR signal (7))
|
|
|
|
occurs.
|
2007-05-27 21:33:14 +00:00
|
|
|
.TP
|
|
|
|
*
|
|
|
|
If the disposition is set to a function,
|
|
|
|
then first either the disposition is reset to
|
|
|
|
.BR SIG_DFL ,
|
|
|
|
or the signal is blocked (see \fIPortability\fP below), and then
|
2006-12-27 03:54:12 +00:00
|
|
|
.I handler
|
2004-11-03 13:51:07 +00:00
|
|
|
is called with argument
|
|
|
|
.IR signum .
|
2007-06-08 10:58:53 +00:00
|
|
|
If invocation of the handler caused the signal to be blocked,
|
2007-05-27 21:33:14 +00:00
|
|
|
then the signal is unblocked upon return from the handler.
|
|
|
|
.PP
|
2004-11-03 13:51:07 +00:00
|
|
|
The signals
|
|
|
|
.B SIGKILL
|
|
|
|
and
|
|
|
|
.B SIGSTOP
|
|
|
|
cannot be caught or ignored.
|
|
|
|
.SH "RETURN VALUE"
|
|
|
|
.BR signal ()
|
2007-05-27 21:03:48 +00:00
|
|
|
returns the previous value of the signal handler, or
|
2004-11-03 13:51:07 +00:00
|
|
|
.B SIG_ERR
|
|
|
|
on error.
|
2007-05-27 21:33:14 +00:00
|
|
|
.SH ERRORS
|
|
|
|
.TP
|
|
|
|
.B EINVAL
|
|
|
|
.I signum
|
|
|
|
is invalid.
|
2007-05-18 16:30:46 +00:00
|
|
|
.SH "CONFORMING TO"
|
|
|
|
C89, C99, POSIX.1-2001.
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NOTES
|
2007-06-21 22:55:04 +00:00
|
|
|
The effects of
|
2007-05-27 21:33:14 +00:00
|
|
|
.BR signal ()
|
|
|
|
in a multi-threaded process are unspecified.
|
2004-11-03 13:51:07 +00:00
|
|
|
.PP
|
2007-06-08 09:56:56 +00:00
|
|
|
According to POSIX, the behavior of a process is undefined after it
|
2004-11-03 13:51:07 +00:00
|
|
|
ignores a
|
|
|
|
.BR SIGFPE ,
|
|
|
|
.BR SIGILL ,
|
|
|
|
or
|
|
|
|
.B SIGSEGV
|
2007-05-27 21:03:48 +00:00
|
|
|
signal that was not generated by
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR kill (2)
|
2007-07-10 03:57:50 +00:00
|
|
|
or
|
2007-05-27 21:03:48 +00:00
|
|
|
.BR raise (3).
|
2004-11-03 13:51:07 +00:00
|
|
|
Integer division by zero has undefined result.
|
|
|
|
On some architectures it will generate a
|
|
|
|
.B SIGFPE
|
|
|
|
signal.
|
|
|
|
(Also dividing the most negative integer by \-1 may generate
|
|
|
|
.BR SIGFPE .)
|
|
|
|
Ignoring this signal might lead to an endless loop.
|
|
|
|
.PP
|
2004-11-19 17:34:32 +00:00
|
|
|
See
|
|
|
|
.BR sigaction (2)
|
|
|
|
for details on what happens when
|
2004-11-03 13:51:07 +00:00
|
|
|
.B SIGCHLD
|
|
|
|
is set to
|
|
|
|
.BR SIG_IGN .
|
|
|
|
.PP
|
2007-05-04 20:32:31 +00:00
|
|
|
See
|
|
|
|
.BR signal (7)
|
2007-06-21 22:55:04 +00:00
|
|
|
for a list of the async-signal-safe functions that can be
|
2007-05-04 20:32:31 +00:00
|
|
|
safely called inside from inside a signal handler.
|
|
|
|
.PP
|
2004-11-03 13:51:07 +00:00
|
|
|
The use of
|
2007-06-23 07:19:07 +00:00
|
|
|
.I sighandler_t
|
2004-11-03 13:51:07 +00:00
|
|
|
is a GNU extension.
|
|
|
|
Various versions of libc predefine this type; libc4 and libc5 define
|
|
|
|
.IR SignalHandler ,
|
|
|
|
glibc defines
|
|
|
|
.I sig_t
|
|
|
|
and, when
|
|
|
|
.B _GNU_SOURCE
|
|
|
|
is defined, also
|
|
|
|
.IR sighandler_t .
|
2007-05-16 02:45:55 +00:00
|
|
|
.SS Portability
|
|
|
|
The original Unix
|
|
|
|
.BR signal ()
|
2007-06-21 05:38:48 +00:00
|
|
|
would reset the handler to
|
|
|
|
.BR SIG_DFL ,
|
|
|
|
and System V
|
2007-05-16 02:45:55 +00:00
|
|
|
(and the Linux kernel and libc4,5) does the same.
|
|
|
|
On the other hand, BSD does not reset the handler, but blocks
|
|
|
|
new instances of this signal from occurring during a call of the handler.
|
2007-06-08 09:56:56 +00:00
|
|
|
The glibc2 library follows the BSD behavior.
|
2007-05-16 02:45:55 +00:00
|
|
|
|
|
|
|
If one on a libc5 system includes
|
2007-06-20 21:53:34 +00:00
|
|
|
.I <bsd/signal.h>
|
2007-05-16 02:45:55 +00:00
|
|
|
instead of
|
2007-06-20 21:53:34 +00:00
|
|
|
.I <signal.h>
|
2007-05-16 02:45:55 +00:00
|
|
|
then
|
|
|
|
.BR signal ()
|
|
|
|
is redefined as
|
2007-05-27 21:03:48 +00:00
|
|
|
.BR __bsd_signal ()
|
|
|
|
and
|
|
|
|
.BR signal ()
|
|
|
|
has the BSD semantics.
|
2007-05-16 02:45:55 +00:00
|
|
|
This is not recommended.
|
|
|
|
|
|
|
|
If one on a glibc2 system defines a feature test
|
|
|
|
macro such as
|
|
|
|
.B _XOPEN_SOURCE
|
|
|
|
or uses a separate
|
2007-05-27 21:03:48 +00:00
|
|
|
.BR sysv_signal (3)
|
2007-06-08 09:56:56 +00:00
|
|
|
function, one obtains classical behavior.
|
2007-05-16 02:45:55 +00:00
|
|
|
This is not recommended.
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR kill (1),
|
|
|
|
.BR alarm (2),
|
|
|
|
.BR kill (2),
|
2007-07-08 15:05:14 +00:00
|
|
|
.BR killpg (2),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR pause (2),
|
|
|
|
.BR sigaction (2),
|
2005-09-15 09:20:05 +00:00
|
|
|
.BR sigpending (2),
|
|
|
|
.BR sigprocmask (2),
|
2004-11-11 14:13:28 +00:00
|
|
|
.BR sigqueue (2),
|
2005-09-15 09:20:05 +00:00
|
|
|
.BR sigsuspend (2),
|
2007-05-04 21:22:28 +00:00
|
|
|
.BR bsd_signal (3),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR raise (3),
|
2007-05-27 21:03:48 +00:00
|
|
|
.BR siginterrupt (3),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR sigsetops (3),
|
2005-11-29 15:01:54 +00:00
|
|
|
.BR sigvec (3),
|
2007-05-04 21:22:28 +00:00
|
|
|
.BR sysv_signal (3),
|
2006-05-15 09:13:10 +00:00
|
|
|
.BR feature_test_macros (7),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR signal (7)
|