2004-11-03 13:51:07 +00:00
|
|
|
'\" t
|
|
|
|
.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
|
2008-07-04 14:36:28 +00:00
|
|
|
.\" and Copyright (c) 2002, 2006 by Michael Kerrisk <mtk.manpages@gmail.com>
|
|
|
|
.\" and Copyright (c) 2008 Linux Foundation, written by Michael Kerrisk
|
|
|
|
.\" <mtk.manpages@gmail.com>
|
2004-11-03 13:51:07 +00:00
|
|
|
.\"
|
|
|
|
.\" 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.
|
2005-06-07 06:51:12 +00:00
|
|
|
.\"
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Modified Sat Jul 24 17:34:08 1993 by Rik Faith (faith@cs.unc.edu)
|
|
|
|
.\" Modified Sun Jan 7 01:41:27 1996 by Andries Brouwer (aeb@cwi.nl)
|
|
|
|
.\" Modified Sun Apr 14 12:02:29 1996 by Andries Brouwer (aeb@cwi.nl)
|
|
|
|
.\" Modified Sat Nov 13 16:28:23 1999 by Andries Brouwer (aeb@cwi.nl)
|
2007-09-20 06:52:22 +00:00
|
|
|
.\" Modified 10 Apr 2002, by Michael Kerrisk <mtk.manpages@gmail.com>
|
|
|
|
.\" Modified 7 Jun 2002, by Michael Kerrisk <mtk.manpages@gmail.com>
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Added information on real-time signals
|
2007-09-20 06:52:22 +00:00
|
|
|
.\" Modified 13 Jun 2002, by Michael Kerrisk <mtk.manpages@gmail.com>
|
2004-11-03 13:51:07 +00:00
|
|
|
.\" Noted that SIGSTKFLT is in fact unused
|
2004-12-03 15:11:50 +00:00
|
|
|
.\" 2004-12-03, Modified mtk, added notes on RLIMIT_SIGPENDING
|
2006-04-24 00:43:09 +00:00
|
|
|
.\" 2006-04-24, mtk, Added text on changing signal dispositions,
|
|
|
|
.\" signal mask, and pending signals.
|
2008-07-04 14:36:28 +00:00
|
|
|
.\" 2008-07-04, mtk:
|
|
|
|
.\" Added section on system call restarting (SA_RESTART)
|
|
|
|
.\" Added section on stop/cont signals interrupting syscalls.
|
2004-11-03 13:51:07 +00:00
|
|
|
.\"
|
2008-07-07 04:16:16 +00:00
|
|
|
.TH SIGNAL 7 2008-07-07 "Linux" "Linux Programmer's Manual"
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH NAME
|
|
|
|
signal \- list of available signals
|
|
|
|
.SH DESCRIPTION
|
|
|
|
Linux supports both POSIX reliable signals (hereinafter
|
|
|
|
"standard signals") and POSIX real-time signals.
|
2006-04-24 00:43:09 +00:00
|
|
|
.SS "Signal Dispositions"
|
2007-04-12 22:42:49 +00:00
|
|
|
Each signal has a current
|
2006-04-24 00:43:09 +00:00
|
|
|
.IR disposition ,
|
2007-04-12 22:42:49 +00:00
|
|
|
which determines how the process behaves when it is delivered
|
2006-04-24 00:43:09 +00:00
|
|
|
the signal.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
2006-04-24 00:43:09 +00:00
|
|
|
The entries in the "Action" column of the tables below specify
|
|
|
|
the default disposition for each signal, as follows:
|
2004-11-03 13:51:07 +00:00
|
|
|
.IP Term
|
|
|
|
Default action is to terminate the process.
|
|
|
|
.IP Ign
|
|
|
|
Default action is to ignore the signal.
|
|
|
|
.IP Core
|
2006-04-24 00:43:09 +00:00
|
|
|
Default action is to terminate the process and dump core (see
|
|
|
|
.BR core (5)).
|
2004-11-03 13:51:07 +00:00
|
|
|
.IP Stop
|
|
|
|
Default action is to stop the process.
|
2006-04-24 00:43:09 +00:00
|
|
|
.IP Cont
|
|
|
|
Default action is to continue the process if it is currently stopped.
|
2004-11-03 13:51:07 +00:00
|
|
|
.PP
|
2006-04-24 00:43:09 +00:00
|
|
|
A process can change the disposition of a signal using
|
|
|
|
.BR sigaction (2)
|
|
|
|
or (less portably)
|
|
|
|
.BR signal (2).
|
2007-04-12 22:42:49 +00:00
|
|
|
Using these system calls, a process can elect one of the
|
2007-10-16 19:18:17 +00:00
|
|
|
following behaviors to occur on delivery of the signal:
|
2007-04-12 22:42:49 +00:00
|
|
|
perform the default action; ignore the signal;
|
2006-04-24 00:43:09 +00:00
|
|
|
or catch the signal with a
|
2007-04-12 22:42:49 +00:00
|
|
|
.IR "signal handler" ,
|
|
|
|
a programmer-defined function that is automatically invoked
|
2006-04-24 00:43:09 +00:00
|
|
|
when the signal is delivered.
|
|
|
|
|
|
|
|
The signal disposition is a per-process attribute:
|
2007-04-12 22:42:49 +00:00
|
|
|
in a multithreaded application, the disposition of a
|
2006-04-24 00:43:09 +00:00
|
|
|
particular signal is the same for all threads.
|
|
|
|
.SS "Signal Mask and Pending Signals"
|
|
|
|
A signal may be
|
|
|
|
.IR blocked ,
|
|
|
|
which means that it will not be delivered until it is later unblocked.
|
|
|
|
Between the time when it is generated and when it is delivered
|
2007-04-12 22:42:49 +00:00
|
|
|
a signal is said to be
|
2006-04-24 00:43:09 +00:00
|
|
|
.IR pending .
|
|
|
|
|
2007-04-12 22:42:49 +00:00
|
|
|
Each thread in a process has an independent
|
|
|
|
.IR "signal mask" ,
|
2006-04-24 00:43:09 +00:00
|
|
|
which indicates the set of signals that the thread is currently blocking.
|
|
|
|
A thread can manipulate its signal mask using
|
|
|
|
.BR pthread_sigmask (3).
|
2007-04-12 22:42:49 +00:00
|
|
|
In a traditional single-threaded application,
|
2006-04-24 00:43:09 +00:00
|
|
|
.BR sigprocmask (2)
|
|
|
|
can be used to manipulate the signal mask.
|
|
|
|
|
|
|
|
A signal may be generated (and thus pending)
|
|
|
|
for a process as a whole (e.g., when sent using
|
2007-04-12 22:42:49 +00:00
|
|
|
.BR kill (2))
|
|
|
|
or for a specific thread (e.g., certain signals,
|
2007-06-25 09:24:48 +00:00
|
|
|
such as
|
|
|
|
.B SIGSEGV
|
|
|
|
and
|
|
|
|
.BR SIGFPE ,
|
|
|
|
generated as a
|
2007-04-12 22:42:49 +00:00
|
|
|
consequence of executing a specific machine-language instruction
|
2006-04-24 00:43:09 +00:00
|
|
|
are thread directed, as are signals targeted at a specific thread using
|
2007-06-11 21:03:33 +00:00
|
|
|
.BR pthread_kill (3)).
|
2006-04-24 00:43:09 +00:00
|
|
|
A process-directed signal may be delivered to any one of the
|
|
|
|
threads that does not currently have the signal blocked.
|
2007-04-12 22:42:49 +00:00
|
|
|
If more than one of the threads has the signal unblocked, then the
|
2006-04-24 00:43:09 +00:00
|
|
|
kernel chooses an arbitrary thread to which to deliver the signal.
|
|
|
|
|
|
|
|
A thread can obtain the set of signals that it currently has pending
|
|
|
|
using
|
|
|
|
.BR sigpending (2).
|
2007-04-12 22:42:49 +00:00
|
|
|
This set will consist of the union of the set of pending
|
|
|
|
process-directed signals and the set of signals pending for
|
2006-04-24 00:43:09 +00:00
|
|
|
the calling thread.
|
|
|
|
.SS "Standard Signals"
|
2007-04-12 22:42:49 +00:00
|
|
|
Linux supports the standard signals listed below.
|
|
|
|
Several signal numbers
|
2007-12-26 11:17:23 +00:00
|
|
|
are architecture-dependent, as indicated in the "Value" column.
|
2006-04-24 00:43:09 +00:00
|
|
|
(Where three values are given, the first one is usually valid for
|
2008-07-04 15:09:27 +00:00
|
|
|
alpha and sparc,
|
|
|
|
the middle one for ix86, ia64, ppc, s390, arm and sh,
|
|
|
|
and the last one for mips.
|
|
|
|
.\" parisc is a law unto itself
|
2006-04-24 00:43:09 +00:00
|
|
|
A \- denotes that a signal is absent on the corresponding architecture.)
|
|
|
|
|
2006-08-03 13:58:08 +00:00
|
|
|
First the signals described in the original POSIX.1-1990 standard.
|
2004-11-03 13:51:07 +00:00
|
|
|
.TS
|
|
|
|
l c c l
|
|
|
|
____
|
|
|
|
lB c c l.
|
|
|
|
Signal Value Action Comment
|
|
|
|
SIGHUP \01 Term Hangup detected on controlling terminal
|
|
|
|
or death of controlling process
|
|
|
|
SIGINT \02 Term Interrupt from keyboard
|
|
|
|
SIGQUIT \03 Core Quit from keyboard
|
|
|
|
SIGILL \04 Core Illegal Instruction
|
2007-05-12 13:12:02 +00:00
|
|
|
SIGABRT \06 Core Abort signal from \fBabort\fP(3)
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGFPE \08 Core Floating point exception
|
|
|
|
SIGKILL \09 Term Kill signal
|
|
|
|
SIGSEGV 11 Core Invalid memory reference
|
2007-12-08 07:48:59 +00:00
|
|
|
SIGPIPE 13 Term Broken pipe: write to pipe with no
|
|
|
|
readers
|
2007-05-12 13:12:02 +00:00
|
|
|
SIGALRM 14 Term Timer signal from \fBalarm\fP(2)
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGTERM 15 Term Termination signal
|
2007-12-26 08:00:10 +00:00
|
|
|
SIGUSR1 30,10,16 Term User-defined signal 1
|
|
|
|
SIGUSR2 31,12,17 Term User-defined signal 2
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGCHLD 20,17,18 Ign Child stopped or terminated
|
2006-04-24 00:43:09 +00:00
|
|
|
SIGCONT 19,18,25 Cont Continue if stopped
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGSTOP 17,19,23 Stop Stop process
|
|
|
|
SIGTSTP 18,20,24 Stop Stop typed at tty
|
|
|
|
SIGTTIN 21,21,26 Stop tty input for background process
|
|
|
|
SIGTTOU 22,22,27 Stop tty output for background process
|
|
|
|
.TE
|
|
|
|
|
|
|
|
The signals
|
|
|
|
.B SIGKILL
|
|
|
|
and
|
|
|
|
.B SIGSTOP
|
|
|
|
cannot be caught, blocked, or ignored.
|
|
|
|
|
2007-04-12 22:42:49 +00:00
|
|
|
Next the signals not in the POSIX.1-1990 standard but described in
|
2006-08-03 13:58:08 +00:00
|
|
|
SUSv2 and POSIX.1-2001.
|
2004-11-03 13:51:07 +00:00
|
|
|
.TS
|
|
|
|
l c c l
|
|
|
|
____
|
|
|
|
lB c c l.
|
|
|
|
Signal Value Action Comment
|
|
|
|
SIGBUS 10,7,10 Core Bus error (bad memory access)
|
2007-12-08 07:48:59 +00:00
|
|
|
SIGPOLL Term Pollable event (Sys V).
|
|
|
|
Synonym for \fBSIGIO\fP
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGPROF 27,27,29 Term Profiling timer expired
|
2006-08-03 13:58:08 +00:00
|
|
|
SIGSYS 12,\-,12 Core Bad argument to routine (SVr4)
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGTRAP 5 Core Trace/breakpoint trap
|
2006-04-23 23:29:16 +00:00
|
|
|
SIGURG 16,23,21 Ign Urgent condition on socket (4.2BSD)
|
|
|
|
SIGVTALRM 26,26,28 Term Virtual alarm clock (4.2BSD)
|
|
|
|
SIGXCPU 24,24,30 Core CPU time limit exceeded (4.2BSD)
|
|
|
|
SIGXFSZ 25,25,31 Core File size limit exceeded (4.2BSD)
|
2004-11-03 13:51:07 +00:00
|
|
|
.TE
|
|
|
|
|
2007-06-08 09:56:56 +00:00
|
|
|
Up to and including Linux 2.2, the default behavior for
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR SIGSYS ", " SIGXCPU ", " SIGXFSZ ", "
|
|
|
|
and (on architectures other than SPARC and MIPS)
|
|
|
|
.B SIGBUS
|
|
|
|
was to terminate the process (without a core dump).
|
2006-12-17 01:04:18 +00:00
|
|
|
(On some other Unix systems the default action for
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR SIGXCPU " and " SIGXFSZ
|
|
|
|
is to terminate the process without a core dump.)
|
2006-08-03 13:58:08 +00:00
|
|
|
Linux 2.4 conforms to the POSIX.1-2001 requirements for these signals,
|
2004-11-03 13:51:07 +00:00
|
|
|
terminating the process with a core dump.
|
|
|
|
|
|
|
|
Next various other signals.
|
|
|
|
.TS
|
|
|
|
l c c l
|
|
|
|
____
|
|
|
|
lB c c l.
|
|
|
|
Signal Value Action Comment
|
2007-06-25 09:24:48 +00:00
|
|
|
SIGIOT 6 Core IOT trap. A synonym for \fBSIGABRT\fP
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGEMT 7,\-,7 Term
|
|
|
|
SIGSTKFLT \-,16,\- Term Stack fault on coprocessor (unused)
|
2006-04-23 23:29:16 +00:00
|
|
|
SIGIO 23,29,22 Term I/O now possible (4.2BSD)
|
2007-06-25 09:24:48 +00:00
|
|
|
SIGCLD \-,\-,18 Ign A synonym for \fBSIGCHLD\fP
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGPWR 29,30,19 Term Power failure (System V)
|
2007-06-25 09:24:48 +00:00
|
|
|
SIGINFO 29,\-,\- A synonym for \fBSIGPWR\fP
|
2004-11-03 13:51:07 +00:00
|
|
|
SIGLOST \-,\-,\- Term File lock lost
|
2006-04-23 23:29:16 +00:00
|
|
|
SIGWINCH 28,28,20 Ign Window resize signal (4.3BSD, Sun)
|
2007-06-25 09:24:48 +00:00
|
|
|
SIGUNUSED \-,31,\- Term Unused signal (will be \fBSIGSYS\fP)
|
2004-11-03 13:51:07 +00:00
|
|
|
.TE
|
|
|
|
|
|
|
|
(Signal 29 is
|
|
|
|
.B SIGINFO
|
|
|
|
/
|
|
|
|
.B SIGPWR
|
|
|
|
on an alpha but
|
|
|
|
.B SIGLOST
|
|
|
|
on a sparc.)
|
|
|
|
|
|
|
|
.B SIGEMT
|
2006-08-03 13:58:08 +00:00
|
|
|
is not specified in POSIX.1-2001, but nevertheless appears
|
2007-04-12 22:42:49 +00:00
|
|
|
on most other Unix systems,
|
2006-12-17 01:04:18 +00:00
|
|
|
where its default action is typically to terminate
|
2004-11-03 13:51:07 +00:00
|
|
|
the process with a core dump.
|
|
|
|
|
|
|
|
.B SIGPWR
|
2006-08-03 13:58:08 +00:00
|
|
|
(which is not specified in POSIX.1-2001) is typically ignored
|
2006-12-17 01:04:18 +00:00
|
|
|
by default on those other Unix systems where it appears.
|
2004-11-03 13:51:07 +00:00
|
|
|
|
|
|
|
.B SIGIO
|
2006-08-03 13:58:08 +00:00
|
|
|
(which is not specified in POSIX.1-2001) is ignored by default
|
2006-12-17 01:04:18 +00:00
|
|
|
on several other Unix systems.
|
2004-11-03 13:51:07 +00:00
|
|
|
.SS "Real-time Signals"
|
2006-08-03 13:58:08 +00:00
|
|
|
Linux supports real-time signals as originally defined in the POSIX.1b
|
|
|
|
real-time extensions (and now included in POSIX.1-2001).
|
2007-06-25 09:24:48 +00:00
|
|
|
The range of supported real-time signals is defined by the macros
|
|
|
|
.B SIGRTMIN
|
|
|
|
and
|
|
|
|
.BR SIGRTMAX .
|
|
|
|
POSIX.1-2001 requires that an implementation support at least
|
|
|
|
.B _POSIX_RTSIG_MAX
|
|
|
|
(8) real-time signals.
|
|
|
|
.PP
|
|
|
|
The Linux kernel supports a range of 32 different real-time
|
|
|
|
signals, numbered 33 to 64.
|
|
|
|
However, the glibc POSIX threads implementation internally uses
|
2007-07-08 12:39:24 +00:00
|
|
|
two (for NPTL) or three (for LinuxThreads) real-time signals
|
2007-06-25 09:24:48 +00:00
|
|
|
(see
|
|
|
|
.BR pthreads (7)),
|
|
|
|
and adjusts the value of
|
|
|
|
.B SIGRTMIN
|
|
|
|
suitably (to 34 or 35).
|
|
|
|
Because the range of available real-time signals varies according
|
|
|
|
to the glibc threading implementation (and this variation can occur
|
2008-03-19 08:46:32 +00:00
|
|
|
at run time according to the available kernel and glibc),
|
2007-06-25 09:24:48 +00:00
|
|
|
and indeed the range of real-time signals varies across Unix systems,
|
|
|
|
programs should
|
|
|
|
.IR "never refer to real-time signals using hard-coded numbers" ,
|
|
|
|
but instead should always refer to real-time signals using the notation
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR SIGRTMIN +n,
|
2007-07-08 12:39:24 +00:00
|
|
|
and include suitable (run-time) checks that
|
2007-06-25 09:24:48 +00:00
|
|
|
.BR SIGRTMIN +n
|
|
|
|
does not exceed
|
|
|
|
.BR SIGRTMAX .
|
2004-11-03 13:51:07 +00:00
|
|
|
.PP
|
|
|
|
Unlike standard signals, real-time signals have no predefined meanings:
|
|
|
|
the entire set of real-time signals can be used for application-defined
|
|
|
|
purposes.
|
|
|
|
(Note, however, that the LinuxThreads implementation uses the first
|
|
|
|
three real-time signals.)
|
|
|
|
.PP
|
|
|
|
The default action for an unhandled real-time signal is to terminate the
|
|
|
|
receiving process.
|
|
|
|
.PP
|
|
|
|
Real-time signals are distinguished by the following:
|
|
|
|
.IP 1. 4
|
|
|
|
Multiple instances of real-time signals can be queued.
|
|
|
|
By contrast, if multiple instances of a standard signal are delivered
|
|
|
|
while that signal is currently blocked, then only one instance is queued.
|
|
|
|
.IP 2. 4
|
|
|
|
If the signal is sent using
|
|
|
|
.BR sigqueue (2),
|
|
|
|
an accompanying value (either an integer or a pointer) can be sent
|
|
|
|
with the signal.
|
|
|
|
If the receiving process establishes a handler for this signal using the
|
2005-06-24 14:17:21 +00:00
|
|
|
.B SA_SIGINFO
|
2004-11-03 13:51:07 +00:00
|
|
|
flag to
|
|
|
|
.BR sigaction (2)
|
|
|
|
then it can obtain this data via the
|
|
|
|
.I si_value
|
|
|
|
field of the
|
|
|
|
.I siginfo_t
|
|
|
|
structure passed as the second argument to the handler.
|
|
|
|
Furthermore, the
|
|
|
|
.I si_pid
|
|
|
|
and
|
|
|
|
.I si_uid
|
|
|
|
fields of this structure can be used to obtain the PID
|
|
|
|
and real user ID of the process sending the signal.
|
|
|
|
.IP 3. 4
|
|
|
|
Real-time signals are delivered in a guaranteed order.
|
|
|
|
Multiple real-time signals of the same type are delivered in the order
|
|
|
|
they were sent.
|
|
|
|
If different real-time signals are sent to a process, they are delivered
|
|
|
|
starting with the lowest-numbered signal.
|
|
|
|
(I.e., low-numbered signals have highest priority.)
|
2008-07-02 12:54:59 +00:00
|
|
|
By contrast, if multiple standard signals are pending for a process,
|
|
|
|
the order in which they are delivered is unspecified.
|
2004-11-03 13:51:07 +00:00
|
|
|
.PP
|
|
|
|
If both standard and real-time signals are pending for a process,
|
|
|
|
POSIX leaves it unspecified which is delivered first.
|
|
|
|
Linux, like many other implementations, gives priority
|
|
|
|
to standard signals in this case.
|
|
|
|
.PP
|
|
|
|
According to POSIX, an implementation should permit at least
|
2007-06-25 09:24:48 +00:00
|
|
|
.B _POSIX_SIGQUEUE_MAX
|
|
|
|
(32) real-time signals to be queued to
|
2004-11-03 13:51:07 +00:00
|
|
|
a process.
|
2004-12-03 15:11:50 +00:00
|
|
|
However, Linux does things differently.
|
|
|
|
In kernels up to and including 2.6.7, Linux imposes
|
2004-11-03 13:51:07 +00:00
|
|
|
a system-wide limit on the number of queued real-time signals
|
|
|
|
for all processes.
|
|
|
|
This limit can be viewed and (with privilege) changed via the
|
|
|
|
.I /proc/sys/kernel/rtsig-max
|
|
|
|
file.
|
|
|
|
A related file,
|
|
|
|
.IR /proc/sys/kernel/rtsig-nr ,
|
|
|
|
can be used to find out how many real-time signals are currently queued.
|
2004-12-03 15:11:50 +00:00
|
|
|
In Linux 2.6.8, these
|
|
|
|
.I /proc
|
2005-06-29 08:13:08 +00:00
|
|
|
interfaces were replaced by the
|
2004-12-03 15:11:50 +00:00
|
|
|
.B RLIMIT_SIGPENDING
|
|
|
|
resource limit, which specifies a per-user limit for queued
|
2004-12-07 17:46:30 +00:00
|
|
|
signals; see
|
2004-12-03 15:11:50 +00:00
|
|
|
.BR setrlimit (2)
|
|
|
|
for further details.
|
2007-05-04 20:31:40 +00:00
|
|
|
.SS "Async-signal-safe functions"
|
|
|
|
.PP
|
|
|
|
A signal handling routine established by
|
|
|
|
.BR sigaction (2)
|
|
|
|
or
|
|
|
|
.BR signal (2)
|
|
|
|
must be very careful, since processing elsewhere may be interrupted
|
2007-08-27 08:36:21 +00:00
|
|
|
at some arbitrary point in the execution of the program.
|
2007-05-04 20:31:40 +00:00
|
|
|
POSIX has the concept of "safe function".
|
|
|
|
If a signal interrupts the execution of an unsafe function, and
|
|
|
|
.I handler
|
|
|
|
calls an unsafe function, then the behavior of the program is undefined.
|
2007-12-21 12:40:54 +00:00
|
|
|
|
2008-07-04 19:40:51 +00:00
|
|
|
POSIX.1-2004 (also known as POSIX.1-2001 Technical Corrigendum 2)
|
|
|
|
requires an implementation to guarantee that the following
|
2007-05-04 20:31:40 +00:00
|
|
|
functions can be safely called inside a signal handler:
|
2008-05-12 21:19:27 +00:00
|
|
|
.\" FIXME . SUSv4 adds functions to this list, and removes a few.
|
2007-05-04 20:31:40 +00:00
|
|
|
|
2007-12-21 12:40:54 +00:00
|
|
|
.in +4
|
|
|
|
.nf
|
|
|
|
_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()
|
2008-07-04 19:40:51 +00:00
|
|
|
sockatmark()
|
2008-07-08 13:39:48 +00:00
|
|
|
socket()
|
2007-12-21 12:40:54 +00:00
|
|
|
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()
|
|
|
|
.fi
|
|
|
|
.in
|
2008-07-04 13:13:35 +00:00
|
|
|
.SS Interruption of System Calls and Library Functions by Signal Handlers
|
2008-07-07 04:16:16 +00:00
|
|
|
If a signal handler is invoked while a system call or library
|
|
|
|
function call is blocked, then either:
|
|
|
|
.IP * 2
|
|
|
|
the call is automatically restarted after the signal handler returns; or
|
|
|
|
.IP *
|
|
|
|
the call fails with the error
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR EINTR .
|
2008-07-07 04:16:16 +00:00
|
|
|
.PP
|
|
|
|
Which of these two behaviors occurs depends on the interface and
|
|
|
|
whether or not the signal handler was established using the
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR SA_RESTART
|
|
|
|
flag (see
|
|
|
|
.BR sigaction (2)).
|
2008-07-04 19:40:51 +00:00
|
|
|
The details vary across Unix systems;
|
2008-07-10 09:38:08 +00:00
|
|
|
below, the details for Linux.
|
2008-07-04 13:13:35 +00:00
|
|
|
|
2008-07-07 04:16:16 +00:00
|
|
|
If a blocked call to one of the following interfaces is interrupted
|
|
|
|
by a signal handler, then the call will be automatically restarted
|
|
|
|
after the signal handler returns if the
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR SA_RESTART
|
2008-07-07 04:16:16 +00:00
|
|
|
flag was used; otherwise the call will fail with the error
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR EINTR :
|
|
|
|
.\" The following system calls use ERESTARTSYS,
|
|
|
|
.\" so that they are restartable
|
|
|
|
.RS 4
|
|
|
|
.IP * 2
|
|
|
|
.BR read (2),
|
|
|
|
.BR readv (2),
|
|
|
|
.BR write (2),
|
|
|
|
.BR writev (2),
|
|
|
|
and
|
|
|
|
.BR ioctl (2)
|
|
|
|
calls on "slow" devices.
|
2008-07-07 04:16:16 +00:00
|
|
|
A "slow" device is one where the I/O call may block for an
|
|
|
|
indefinite time, for example, a terminal, pipe, or socket.
|
2008-07-04 13:13:35 +00:00
|
|
|
(A disk is not a slow device according to this definition.)
|
2008-07-07 04:16:16 +00:00
|
|
|
If an I/O call on a slow device has already transferred some
|
|
|
|
data by the time it is interrupted by a signal handler,
|
2008-07-04 13:13:35 +00:00
|
|
|
then the call will return a success status
|
|
|
|
(normally, the number of bytes transferred).
|
|
|
|
.IP *
|
|
|
|
.BR open (2),
|
2008-07-04 19:40:51 +00:00
|
|
|
if it can block (e.g., when opening a FIFO; see
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR fifo (7)).
|
|
|
|
.IP *
|
|
|
|
.BR wait (2),
|
|
|
|
.BR wait3 (2),
|
|
|
|
.BR wait4 (2),
|
|
|
|
.BR waitid (2),
|
|
|
|
and
|
|
|
|
.BR waitpid (2).
|
|
|
|
.IP *
|
|
|
|
Socket interfaces:
|
2008-07-07 04:16:16 +00:00
|
|
|
.\" If a timeout (setsockopt()) is in effect on the socket, then these
|
2008-07-04 13:13:35 +00:00
|
|
|
.\" system calls switch to using EINTR. Consequently, they and are not
|
|
|
|
.\" automatically restarted, and they show the stop/cont behavior
|
|
|
|
.\" described below. (Verified from 2.6.26 source, and by experiment; mtk)
|
|
|
|
.BR accept (2),
|
|
|
|
.BR connect (2),
|
|
|
|
.BR recv (2),
|
|
|
|
.BR recvfrom (2),
|
|
|
|
.BR recvmsg (2),
|
|
|
|
.BR send (2),
|
|
|
|
.BR sendto (2),
|
|
|
|
and
|
|
|
|
.BR sendmsg (2).
|
|
|
|
.IP *
|
|
|
|
File locking interfaces:
|
|
|
|
.BR flock (2)
|
|
|
|
and
|
|
|
|
.BR fcntl (2)
|
|
|
|
.BR F_SETLKW .
|
|
|
|
.IP *
|
|
|
|
POSIX message queue interfaces:
|
2008-07-04 15:16:26 +00:00
|
|
|
.BR mq_receive (3),
|
|
|
|
.BR mq_timedreceive (3),
|
|
|
|
.BR mq_send (3),
|
2008-07-04 13:13:35 +00:00
|
|
|
and
|
2008-07-04 15:16:26 +00:00
|
|
|
.BR mq_timedsend (3).
|
2008-07-04 13:13:35 +00:00
|
|
|
.IP *
|
|
|
|
.BR futex (2)
|
|
|
|
.B FUTEX_WAIT
|
|
|
|
(since Linux 2.6.22; beforehand, always failed with
|
|
|
|
.BR EINTR ).
|
|
|
|
.IP *
|
|
|
|
POSIX semaphore interfaces:
|
|
|
|
.BR sem_wait (3)
|
|
|
|
and
|
|
|
|
.BR sem_timedwait (3)
|
|
|
|
(since Linux 2.6.22; beforehand, always failed with
|
|
|
|
.BR EINTR ).
|
|
|
|
.RE
|
|
|
|
.PP
|
|
|
|
The following interfaces are never restarted after
|
|
|
|
being interrupted by a signal handler,
|
|
|
|
regardless of the use of
|
2008-07-04 20:07:45 +00:00
|
|
|
.BR SA_RESTART ;
|
|
|
|
they always fail with the error
|
|
|
|
.B EINTR
|
|
|
|
when interrupted by a signal handler:
|
2008-07-04 13:13:35 +00:00
|
|
|
.\" These are the system calls that give EINTR or ERESTARTNOHAND
|
|
|
|
.\" on interruption by a signal handler.
|
|
|
|
.RS 4
|
|
|
|
.IP * 2
|
|
|
|
Interfaces used to wait for signals:
|
|
|
|
.BR pause (2),
|
|
|
|
.BR sigsuspend (2),
|
2008-07-04 14:36:28 +00:00
|
|
|
.BR sigtimedwait (2),
|
2008-07-04 13:13:35 +00:00
|
|
|
and
|
|
|
|
.BR sigwaitinfo (2).
|
|
|
|
.IP *
|
|
|
|
File descriptor multiplexing interfaces:
|
|
|
|
.BR epoll_wait (2),
|
|
|
|
.BR epoll_pwait (2),
|
|
|
|
.BR poll (2),
|
|
|
|
.BR ppoll (2),
|
|
|
|
.BR select (2),
|
|
|
|
and
|
|
|
|
.BR pselect (2).
|
|
|
|
.IP *
|
2008-07-04 16:24:13 +00:00
|
|
|
System V IPC interfaces:
|
2008-07-04 13:13:35 +00:00
|
|
|
.\" On some other systems, SA_RESTART does restart these system calls
|
|
|
|
.BR msgrcv (2),
|
|
|
|
.BR msgsnd (2),
|
|
|
|
.BR semop (2),
|
|
|
|
and
|
|
|
|
.BR semtimedop (2).
|
|
|
|
.IP *
|
|
|
|
Sleep interfaces:
|
|
|
|
.BR clock_nanosleep (2),
|
|
|
|
.BR nanosleep (2),
|
|
|
|
and
|
|
|
|
.BR usleep (3).
|
|
|
|
.IP *
|
|
|
|
.BR read (2)
|
|
|
|
from an
|
|
|
|
.BR inotify (7)
|
|
|
|
file descriptor.
|
|
|
|
.IP *
|
|
|
|
.BR io_getevents (2).
|
|
|
|
.RE
|
2008-07-04 20:07:45 +00:00
|
|
|
.PP
|
|
|
|
The
|
|
|
|
.BR sleep (3)
|
|
|
|
function is also never restarted if interrupted by a handler,
|
|
|
|
but gives a success return: the number of seconds remaining to sleep.
|
2008-07-04 13:15:12 +00:00
|
|
|
.SS Interruption of System Calls and Library Functions by Stop Signals
|
|
|
|
On Linux, even in the absence of signal handlers,
|
|
|
|
certain blocking interfaces can fail with the error
|
|
|
|
.BR EINTR
|
|
|
|
after the process is stopped by one of the stop signals
|
|
|
|
and then resumed via
|
|
|
|
.BR SIGCONT .
|
|
|
|
This behavior is not sanctioned by POSIX.1, and doesn't occur
|
|
|
|
on other systems.
|
|
|
|
|
|
|
|
The Linux interfaces that display this behavior are:
|
|
|
|
.RS 4
|
|
|
|
.IP * 2
|
|
|
|
.BR epoll_wait (2),
|
|
|
|
.BR epoll_pwait (2).
|
|
|
|
.IP *
|
|
|
|
.BR semop (2),
|
|
|
|
.BR semtimedop (2).
|
|
|
|
.IP *
|
|
|
|
.BR sigtimedwait (2),
|
|
|
|
.BR sigwaitinfo (2).
|
|
|
|
.IP *
|
|
|
|
.BR read (2)
|
|
|
|
from an
|
|
|
|
.BR inotify (7)
|
|
|
|
file descriptor.
|
|
|
|
.IP *
|
|
|
|
Linux 2.6.21 and earlier:
|
|
|
|
.BR futex (2)
|
|
|
|
.BR FUTEX_WAIT ,
|
|
|
|
.BR sem_timedwait (3),
|
|
|
|
.BR sem_wait (3).
|
|
|
|
.IP *
|
|
|
|
Linux 2.6.8 and earlier:
|
|
|
|
.BR msgrcv (2),
|
|
|
|
.BR msgsnd (2).
|
|
|
|
.IP *
|
|
|
|
Linux 2.4 and earlier:
|
|
|
|
.BR nanosleep (2).
|
|
|
|
.RE
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH "CONFORMING TO"
|
2008-07-04 20:07:45 +00:00
|
|
|
POSIX.1, except as noted.
|
2004-11-03 13:51:07 +00:00
|
|
|
.SH BUGS
|
|
|
|
.B SIGIO
|
|
|
|
and
|
|
|
|
.B SIGLOST
|
|
|
|
have the same value.
|
|
|
|
The latter is commented out in the kernel source, but
|
|
|
|
the build process of some software still thinks that
|
2008-07-04 14:36:28 +00:00
|
|
|
signal 29 is
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR SIGLOST .
|
|
|
|
.SH "SEE ALSO"
|
|
|
|
.BR kill (1),
|
2008-07-04 15:09:27 +00:00
|
|
|
.BR getrlimit (2),
|
2004-11-03 13:51:07 +00:00
|
|
|
.BR kill (2),
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR killpg (2),
|
|
|
|
.BR setitimer (2),
|
|
|
|
.BR setrlimit (2),
|
|
|
|
.BR sgetmask (2),
|
|
|
|
.BR sigaction (2),
|
2008-07-04 15:09:27 +00:00
|
|
|
.BR sigaltstack (2),
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR signal (2),
|
2008-02-11 11:41:18 +00:00
|
|
|
.BR signalfd (2),
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR sigpending (2),
|
|
|
|
.BR sigprocmask (2),
|
|
|
|
.BR sigqueue (2),
|
|
|
|
.BR sigsuspend (2),
|
|
|
|
.BR sigwaitinfo (2),
|
2008-07-04 15:09:27 +00:00
|
|
|
.BR abort (3),
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR bsd_signal (3),
|
2008-07-04 15:09:27 +00:00
|
|
|
.BR longjmp (3),
|
2006-04-24 00:43:09 +00:00
|
|
|
.BR raise (3),
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR sigset (3),
|
2008-07-04 15:09:27 +00:00
|
|
|
.BR sigsetops (3),
|
|
|
|
.BR sigvec (3),
|
2008-07-02 13:30:54 +00:00
|
|
|
.BR sigwait (3),
|
2008-07-04 13:13:35 +00:00
|
|
|
.BR strsignal (3),
|
|
|
|
.BR sysv_signal (3),
|
2006-03-31 07:10:17 +00:00
|
|
|
.BR core (5),
|
2005-11-17 13:38:34 +00:00
|
|
|
.BR proc (5),
|
|
|
|
.BR pthreads (7)
|