mirror of https://github.com/mkerrisk/man-pages
182 lines
4.7 KiB
Groff
182 lines
4.7 KiB
Groff
.\" Copyright (c) 2000 Andries Brouwer <aeb@cwi.nl>
|
|
.\" 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.
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
.\"
|
|
.\" Modified 2004-11-19, mtk:
|
|
.\" added pointer to sigaction.2 for details of ignoring SIGCHLD
|
|
.\"
|
|
.TH SIGNAL 2 2000-04-28 "Linux 2.2" "Linux Programmer's Manual"
|
|
.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
|
|
The
|
|
.BR signal ()
|
|
system call installs a new signal handler for the signal with number
|
|
.IR signum .
|
|
The signal handler is set to
|
|
.I handler
|
|
which may be a user specified function, or either
|
|
.B SIG_IGN
|
|
or
|
|
.BR SIG_DFL .
|
|
|
|
Upon arrival of a signal with number
|
|
.I signum
|
|
the following happens.
|
|
If the corresponding handler is set to
|
|
.BR SIG_IGN ,
|
|
then the signal is ignored.
|
|
If the handler is set to
|
|
.BR SIG_DFL ,
|
|
then the default action associated with the signal (see
|
|
.BR signal (7))
|
|
occurs.
|
|
Finally, if the handler is set to a function
|
|
.I handler
|
|
then first either the handler is reset to SIG_DFL
|
|
or an implementation-dependent blocking of the signal
|
|
is performed, and then
|
|
.I handler
|
|
is called with argument
|
|
.IR signum .
|
|
|
|
Using a signal handler function for a signal
|
|
is called "catching the signal".
|
|
The signals
|
|
.B SIGKILL
|
|
and
|
|
.B SIGSTOP
|
|
cannot be caught or ignored.
|
|
.SH "RETURN VALUE"
|
|
The
|
|
.BR signal ()
|
|
function returns the previous value of the signal handler, or
|
|
.B SIG_ERR
|
|
on error.
|
|
.SH PORTABILITY
|
|
The original Unix
|
|
.BR signal ()
|
|
would reset the handler to SIG_DFL, and System V
|
|
(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.
|
|
The glibc2 library follows the BSD behaviour.
|
|
|
|
If one on a libc5 system includes
|
|
.B "<bsd/signal.h>"
|
|
instead of
|
|
.B "<signal.h>"
|
|
then
|
|
.BR signal ()
|
|
is redefined as
|
|
.B __bsd_signal
|
|
and signal has the BSD semantics.
|
|
This is not recommended.
|
|
|
|
If one on a glibc2 system defines a feature test
|
|
macro such as
|
|
.B _XOPEN_SOURCE
|
|
or uses a separate
|
|
.B sysv_signal
|
|
function, one obtains classical behaviour.
|
|
This is not recommended.
|
|
|
|
Trying to change the semantics of this call using
|
|
defines and includes is not a good idea.
|
|
It is better to avoid
|
|
.BR signal ()
|
|
altogether, and use
|
|
.BR sigaction (2)
|
|
instead.
|
|
.SH NOTES
|
|
The effects of this call in a multi-threaded process are unspecified.
|
|
.PP
|
|
According to POSIX, the behaviour of a process is undefined after it
|
|
ignores a
|
|
.BR SIGFPE ,
|
|
.BR SIGILL ,
|
|
or
|
|
.B SIGSEGV
|
|
signal that was not generated by the
|
|
.BR kill (2)
|
|
or the
|
|
.BR raise (3)
|
|
functions.
|
|
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
|
|
See
|
|
.BR sigaction (2)
|
|
for details on what happens when
|
|
.B SIGCHLD
|
|
is set to
|
|
.BR SIG_IGN .
|
|
.PP
|
|
See
|
|
.BR signal (7)
|
|
for a list of the async-signal-safe functions that can be
|
|
safely called inside from inside a signal handler.
|
|
.PP
|
|
The use of
|
|
.B sighandler_t
|
|
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 .
|
|
.SH "CONFORMING TO"
|
|
C89, C99, POSIX.1-2001.
|
|
.SH "SEE ALSO"
|
|
.BR kill (1),
|
|
.BR alarm (2),
|
|
.BR kill (2),
|
|
.BR pause (2),
|
|
.BR sigaction (2),
|
|
.BR sigpending (2),
|
|
.BR sigprocmask (2),
|
|
.BR sigqueue (2),
|
|
.BR sigsuspend (2),
|
|
.BR bsd_signal (3),
|
|
.BR killpg (3),
|
|
.BR raise (3),
|
|
.BR sigsetops (3),
|
|
.BR sigvec (3),
|
|
.BR sysv_signal (3),
|
|
.BR feature_test_macros (7),
|
|
.BR signal (7)
|