2004-11-03 13:51:07 +00:00
|
|
|
.\" 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.
|
|
|
|
.\"
|
2004-11-19 17:34:32 +00:00
|
|
|
.\" Modified 2004-11-19, mtk:
|
|
|
|
.\" added pointer to sigaction.2 for details of ignoring SIGCHLD
|
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.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 sighandler
|
|
|
|
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 ,
|
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.
|
|
|
|
Finally, if the handler is set to a function
|
|
|
|
.I sighandler
|
|
|
|
then first either the handler is reset to SIG_DFL
|
|
|
|
or an implementation-dependent blocking of the signal
|
|
|
|
is performed and next
|
|
|
|
.I sighandler
|
|
|
|
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
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR signal ()
|
2004-11-03 13:51:07 +00:00
|
|
|
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
|
2005-10-19 06:54:38 +00:00
|
|
|
.BR signal ()
|
2004-11-03 13:51:07 +00:00
|
|
|
altogether, and use
|
|
|
|
.BR sigaction (2)
|
|
|
|
instead.
|
|
|
|
.SH NOTES
|
|
|
|
The effects of this call in a multi-threaded process are unspecified.
|
|
|
|
.PP
|
|
|
|
The routine
|
|
|
|
.I handler
|
|
|
|
must be very careful, since processing elsewhere was interrupted
|
|
|
|
at some arbitrary point. POSIX has the concept of "safe function".
|
|
|
|
If a signal interrupts an unsafe function, and
|
|
|
|
.I handler
|
|
|
|
calls an unsafe function, then the behavior is undefined. Safe
|
|
|
|
functions are listed explicitly in the various standards.
|
|
|
|
The POSIX 1003.1-2003 list is
|
|
|
|
|
|
|
|
_Exit()
|
|
|
|
_exit()
|
|
|
|
abort()
|
|
|
|
accept()
|
|
|
|
access()
|
|
|
|
aio_error()
|
|
|
|
aio_return()
|
|
|
|
aio_suspend()
|
|
|
|
alarm()
|
|
|
|
bind()
|
|
|
|
cfgetispeed()
|
|
|
|
cfgetospeed()
|
|
|
|
cfsetispeed()
|
|
|
|
cfsetospeed()
|
|
|
|
chdir()
|
|
|
|
chmod()
|
|
|
|
chown()
|
|
|
|
clock_gettime()
|
|
|
|
close()
|
|
|
|
connect()
|
|
|
|
creat()
|
|
|
|
dup()
|
|
|
|
dup2()
|
|
|
|
execle()
|
|
|
|
execve()
|
|
|
|
fchmod()
|
|
|
|
fchown()
|
|
|
|
fcntl()
|
|
|
|
fdatasync()
|
|
|
|
fork()
|
|
|
|
fpathconf()
|
|
|
|
fstat()
|
|
|
|
fsync()
|
|
|
|
ftruncate()
|
|
|
|
getegid()
|
|
|
|
geteuid()
|
|
|
|
getgid()
|
|
|
|
getgroups()
|
|
|
|
getpeername()
|
|
|
|
getpgrp()
|
|
|
|
getpid()
|
|
|
|
getppid()
|
|
|
|
getsockname()
|
|
|
|
getsockopt()
|
|
|
|
getuid()
|
|
|
|
kill()
|
|
|
|
link()
|
|
|
|
listen()
|
|
|
|
lseek()
|
|
|
|
lstat()
|
|
|
|
mkdir()
|
|
|
|
mkfifo()
|
|
|
|
open()
|
|
|
|
pathconf()
|
|
|
|
pause()
|
|
|
|
pipe()
|
|
|
|
poll()
|
|
|
|
posix_trace_event()
|
|
|
|
pselect()
|
|
|
|
raise()
|
|
|
|
read()
|
|
|
|
readlink()
|
|
|
|
recv()
|
|
|
|
recvfrom()
|
|
|
|
recvmsg()
|
|
|
|
rename()
|
|
|
|
rmdir()
|
|
|
|
select()
|
|
|
|
sem_post()
|
|
|
|
send()
|
|
|
|
sendmsg()
|
|
|
|
sendto()
|
|
|
|
setgid()
|
|
|
|
setpgid()
|
|
|
|
setsid()
|
|
|
|
setsockopt()
|
|
|
|
setuid()
|
|
|
|
shutdown()
|
|
|
|
sigaction()
|
|
|
|
sigaddset()
|
|
|
|
sigdelset()
|
|
|
|
sigemptyset()
|
|
|
|
sigfillset()
|
|
|
|
sigismember()
|
|
|
|
signal()
|
|
|
|
sigpause()
|
|
|
|
sigpending()
|
|
|
|
sigprocmask()
|
|
|
|
sigqueue()
|
|
|
|
sigset()
|
|
|
|
sigsuspend()
|
|
|
|
sleep()
|
|
|
|
socket()
|
|
|
|
socketpair()
|
|
|
|
stat()
|
|
|
|
symlink()
|
|
|
|
sysconf()
|
|
|
|
tcdrain()
|
|
|
|
tcflow()
|
|
|
|
tcflush()
|
|
|
|
tcgetattr()
|
|
|
|
tcgetpgrp()
|
|
|
|
tcsendbreak()
|
|
|
|
tcsetattr()
|
|
|
|
tcsetpgrp()
|
|
|
|
time()
|
|
|
|
timer_getoverrun()
|
|
|
|
timer_gettime()
|
|
|
|
timer_settime()
|
|
|
|
times()
|
|
|
|
umask()
|
|
|
|
uname()
|
|
|
|
unlink()
|
|
|
|
utime()
|
|
|
|
wait()
|
|
|
|
waitpid()
|
|
|
|
write().
|
|
|
|
.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
|
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
|
|
|
|
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"
|
|
|
|
ANSI C
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR kill (1),
|
|
|
|
.BR alarm (2),
|
|
|
|
.BR kill (2),
|
|
|
|
.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),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR sigvec (2),
|
2004-11-11 14:13:28 +00:00
|
|
|
.BR killpg (3),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR raise (3),
|
|
|
|
.BR sigsetops (3),
|
|
|
|
.BR signal (7)
|