mirror of https://github.com/mkerrisk/man-pages
498 lines
14 KiB
Groff
498 lines
14 KiB
Groff
'\" t
|
|
.\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de)
|
|
.\" and Copyright (c) 2002,2006 by Michael Kerrisk <mtk-manpages@gmx.net>
|
|
.\"
|
|
.\" 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 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)
|
|
.\" Modified 10 Apr 2002, by Michael Kerrisk <mtk-manpages@gmx.net>
|
|
.\" Modified 7 Jun 2002, by Michael Kerrisk <mtk-manpages@gmx.net>
|
|
.\" Added information on real-time signals
|
|
.\" Modified 13 Jun 2002, by Michael Kerrisk <mtk-manpages@gmx.net>
|
|
.\" Noted that SIGSTKFLT is in fact unused
|
|
.\" 2004-12-03, Modified mtk, added notes on RLIMIT_SIGPENDING
|
|
.\" 2006-04-24, mtk, Added text on changing signal dispositions,
|
|
.\" signal mask, and pending signals.
|
|
.\"
|
|
.TH SIGNAL 7 2002-06-13 "Linux" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
signal \- list of available signals
|
|
.SH DESCRIPTION
|
|
Linux supports both POSIX reliable signals (hereinafter
|
|
"standard signals") and POSIX real-time signals.
|
|
.SS "Signal Dispositions"
|
|
Each signal has a current
|
|
.IR disposition ,
|
|
which determines how the process behaves when it is delivered
|
|
the signal.
|
|
|
|
The entries in the "Action" column of the tables below specify
|
|
the default disposition for each signal, as follows:
|
|
.IP Term
|
|
Default action is to terminate the process.
|
|
.IP Ign
|
|
Default action is to ignore the signal.
|
|
.IP Core
|
|
Default action is to terminate the process and dump core (see
|
|
.BR core (5)).
|
|
.IP Stop
|
|
Default action is to stop the process.
|
|
.IP Cont
|
|
Default action is to continue the process if it is currently stopped.
|
|
.PP
|
|
A process can change the disposition of a signal using
|
|
.BR sigaction (2)
|
|
or (less portably)
|
|
.BR signal (2).
|
|
Using these system calls, a process can elect one of the
|
|
following behavior to occur on delivery of the signal:
|
|
perform the default action; ignore the signal;
|
|
or catch the signal with a
|
|
.IR "signal handler" ,
|
|
a programmer-defined function that is automatically invoked
|
|
when the signal is delivered.
|
|
|
|
The signal disposition is a per-process attribute:
|
|
in a multithreaded application, the disposition of a
|
|
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
|
|
a signal is said to be
|
|
.IR pending .
|
|
|
|
Each thread in a process has an independent
|
|
.IR "signal mask" ,
|
|
which indicates the set of signals that the thread is currently blocking.
|
|
A thread can manipulate its signal mask using
|
|
.BR pthread_sigmask (3).
|
|
In a traditional single-threaded application,
|
|
.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
|
|
.BR kill (2))
|
|
or for a specific thread (e.g., certain signals,
|
|
such as
|
|
.B SIGSEGV
|
|
and
|
|
.BR SIGFPE ,
|
|
generated as a
|
|
consequence of executing a specific machine-language instruction
|
|
are thread directed, as are signals targeted at a specific thread using
|
|
.BR pthread_kill (3)).
|
|
A process-directed signal may be delivered to any one of the
|
|
threads that does not currently have the signal blocked.
|
|
If more than one of the threads has the signal unblocked, then the
|
|
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).
|
|
This set will consist of the union of the set of pending
|
|
process-directed signals and the set of signals pending for
|
|
the calling thread.
|
|
.SS "Standard Signals"
|
|
Linux supports the standard signals listed below.
|
|
Several signal numbers
|
|
are architecture dependent, as indicated in the "Value" column.
|
|
(Where three values are given, the first one is usually valid for
|
|
alpha and sparc, the middle one for i386, ppc and sh, and
|
|
the last one for mips.
|
|
A \- denotes that a signal is absent on the corresponding architecture.)
|
|
|
|
First the signals described in the original POSIX.1-1990 standard.
|
|
.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
|
|
SIGABRT \06 Core Abort signal from \fBabort\fP(3)
|
|
SIGFPE \08 Core Floating point exception
|
|
SIGKILL \09 Term Kill signal
|
|
SIGSEGV 11 Core Invalid memory reference
|
|
SIGPIPE 13 Term Broken pipe: write to pipe with no readers
|
|
SIGALRM 14 Term Timer signal from \fBalarm\fP(2)
|
|
SIGTERM 15 Term Termination signal
|
|
SIGUSR1 30,10,16 Term User\-defined signal 1
|
|
SIGUSR2 31,12,17 Term User\-defined signal 2
|
|
SIGCHLD 20,17,18 Ign Child stopped or terminated
|
|
SIGCONT 19,18,25 Cont Continue if stopped
|
|
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.
|
|
|
|
Next the signals not in the POSIX.1-1990 standard but described in
|
|
SUSv2 and POSIX.1-2001.
|
|
.TS
|
|
l c c l
|
|
____
|
|
lB c c l.
|
|
Signal Value Action Comment
|
|
SIGBUS 10,7,10 Core Bus error (bad memory access)
|
|
SIGPOLL Term Pollable event (Sys V). Synonym of \fISIGIO\fP
|
|
SIGPROF 27,27,29 Term Profiling timer expired
|
|
SIGSYS 12,\-,12 Core Bad argument to routine (SVr4)
|
|
SIGTRAP 5 Core Trace/breakpoint trap
|
|
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)
|
|
.TE
|
|
|
|
Up to and including Linux 2.2, the default behavior for
|
|
.BR SIGSYS ", " SIGXCPU ", " SIGXFSZ ", "
|
|
and (on architectures other than SPARC and MIPS)
|
|
.B SIGBUS
|
|
was to terminate the process (without a core dump).
|
|
(On some other Unix systems the default action for
|
|
.BR SIGXCPU " and " SIGXFSZ
|
|
is to terminate the process without a core dump.)
|
|
Linux 2.4 conforms to the POSIX.1-2001 requirements for these signals,
|
|
terminating the process with a core dump.
|
|
|
|
Next various other signals.
|
|
.TS
|
|
l c c l
|
|
____
|
|
lB c c l.
|
|
Signal Value Action Comment
|
|
SIGIOT 6 Core IOT trap. A synonym for \fBSIGABRT\fP
|
|
SIGEMT 7,\-,7 Term
|
|
SIGSTKFLT \-,16,\- Term Stack fault on coprocessor (unused)
|
|
SIGIO 23,29,22 Term I/O now possible (4.2BSD)
|
|
SIGCLD \-,\-,18 Ign A synonym for \fBSIGCHLD\fP
|
|
SIGPWR 29,30,19 Term Power failure (System V)
|
|
SIGINFO 29,\-,\- A synonym for \fBSIGPWR\fP
|
|
SIGLOST \-,\-,\- Term File lock lost
|
|
SIGWINCH 28,28,20 Ign Window resize signal (4.3BSD, Sun)
|
|
SIGUNUSED \-,31,\- Term Unused signal (will be \fBSIGSYS\fP)
|
|
.TE
|
|
|
|
(Signal 29 is
|
|
.B SIGINFO
|
|
/
|
|
.B SIGPWR
|
|
on an alpha but
|
|
.B SIGLOST
|
|
on a sparc.)
|
|
|
|
.B SIGEMT
|
|
is not specified in POSIX.1-2001, but nevertheless appears
|
|
on most other Unix systems,
|
|
where its default action is typically to terminate
|
|
the process with a core dump.
|
|
|
|
.B SIGPWR
|
|
(which is not specified in POSIX.1-2001) is typically ignored
|
|
by default on those other Unix systems where it appears.
|
|
|
|
.B SIGIO
|
|
(which is not specified in POSIX.1-2001) is ignored by default
|
|
on several other Unix systems.
|
|
.SS "Real-time Signals"
|
|
Linux supports real-time signals as originally defined in the POSIX.1b
|
|
real-time extensions (and now included in POSIX.1-2001).
|
|
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
|
|
two (for NPTL) or three (for LinuxThreads) real-time signals
|
|
(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
|
|
at run-time according to the available kernel and glibc),
|
|
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
|
|
.BR SIGRTMIN +n,
|
|
and include suitable (run-time) checks that
|
|
.BR SIGRTMIN +n
|
|
does not exceed
|
|
.BR SIGRTMAX .
|
|
.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
|
|
.B SA_SIGINFO
|
|
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.)
|
|
.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
|
|
.B _POSIX_SIGQUEUE_MAX
|
|
(32) real-time signals to be queued to
|
|
a process.
|
|
However, Linux does things differently.
|
|
In kernels up to and including 2.6.7, Linux imposes
|
|
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.
|
|
In Linux 2.6.8, these
|
|
.I /proc
|
|
interfaces were replaced by the
|
|
.B RLIMIT_SIGPENDING
|
|
resource limit, which specifies a per-user limit for queued
|
|
signals; see
|
|
.BR setrlimit (2)
|
|
for further details.
|
|
.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
|
|
at some arbitrary point in the execution of the program1.
|
|
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.
|
|
POSIX.1-2003 requires an implementation to guarantee that the following
|
|
functions can be safely called inside a signal handler:
|
|
|
|
_Exit(),
|
|
_exit(),
|
|
abort(),
|
|
accept(),
|
|
access(),
|
|
aio\%_error(),
|
|
aio\%_return(),
|
|
aio\%_suspend(),
|
|
alarm(),
|
|
bind(),
|
|
cfget\%ispeed(),
|
|
cfget\%ospeed(),
|
|
cfset\%ispeed(),
|
|
cfset\%ospeed(),
|
|
chdir(),
|
|
chmod(),
|
|
chown(),
|
|
clock\%_get\%time(),
|
|
close(),
|
|
connect(),
|
|
creat(),
|
|
dup(),
|
|
dup2(),
|
|
execle(),
|
|
execve(),
|
|
fchmod(),
|
|
fchown(),
|
|
fcntl(),
|
|
fdata\%sync(),
|
|
fork(),
|
|
fpath\%conf(),
|
|
fstat(),
|
|
fsync(),
|
|
ftruncate(),
|
|
get\%egid(),
|
|
get\%euid(),
|
|
get\%gid(),
|
|
get\%groups(),
|
|
get\%peer\%name(),
|
|
get\%pgrp(),
|
|
get\%pid(),
|
|
get\%ppid(),
|
|
get\%sockname(),
|
|
get\%sockopt(),
|
|
get\%uid(),
|
|
kill(),
|
|
link(),
|
|
listen(),
|
|
lseek(),
|
|
lstat(),
|
|
mkdir(),
|
|
mkfifo(),
|
|
open(),
|
|
path\%conf(),
|
|
pause(),
|
|
pipe(),
|
|
poll(),
|
|
posix\%_trace\%_event(),
|
|
pselect(),
|
|
raise(),
|
|
read(),
|
|
readlink(),
|
|
recv(),
|
|
recv\%from(),
|
|
recv\%msg(),
|
|
rename(),
|
|
rmdir(),
|
|
select(),
|
|
sem\%_post(),
|
|
send(),
|
|
send\%msg(),
|
|
send\%to(),
|
|
set\%gid(),
|
|
set\%pgid(),
|
|
set\%sid(),
|
|
set\%sock\%opt(),
|
|
set\%uid(),
|
|
shutdown(),
|
|
sig\%action(),
|
|
sig\%addset(),
|
|
sig\%delset(),
|
|
sig\%empty\%set(),
|
|
sig\%fill\%set(),
|
|
sig\%is\%member(),
|
|
sig\%nal(),
|
|
sig\%pause(),
|
|
sig\%pend\%ing(),
|
|
sig\%proc\%mask(),
|
|
sig\%queue(),
|
|
sig\%set(),
|
|
sig\%suspend(),
|
|
sleep(),
|
|
socket(),
|
|
socket\%pair(),
|
|
stat(),
|
|
symlink(),
|
|
sys\%conf(),
|
|
tcdrain(),
|
|
tcflow(),
|
|
tcflush(),
|
|
tcget\%attr(),
|
|
tcget\%pgrp(),
|
|
tcsend\%break(),
|
|
tcset\%attr(),
|
|
tcset\%pgrp(),
|
|
time(),
|
|
timer\%_get\%over\%run(),
|
|
timer\%_get\%time(),
|
|
timer\%_set\%time(),
|
|
times(),
|
|
umask(),
|
|
uname(),
|
|
unlink(),
|
|
utime(),
|
|
wait(),
|
|
wait\%pid(),
|
|
write().
|
|
.SH "CONFORMING TO"
|
|
POSIX.1
|
|
.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
|
|
signal 29 is
|
|
.BR SIGLOST .
|
|
.SH "SEE ALSO"
|
|
.BR kill (1),
|
|
.BR kill (2),
|
|
.BR kill\%pg (2),
|
|
.BR set\%itimer (2),
|
|
.BR set\%rlimit (2),
|
|
.BR sget\%mask (2),
|
|
.BR sig\%action (2),
|
|
.BR sig\%nal (2),
|
|
.BR sig\%pend\%ing (2),
|
|
.BR sig\%proc\%mask (2),
|
|
.BR sig\%queue (2),
|
|
.BR sig\%suspend (2),
|
|
.BR sig\%waitinfo (2),
|
|
.BR bsd\%_signal (3),
|
|
.BR raise (3),
|
|
.BR sig\%vec (3),
|
|
.BR sig\%set (3),
|
|
.BR str\%signal (3),
|
|
.BR sysv\%_signal (3),
|
|
.BR core (5),
|
|
.BR proc (5),
|
|
.BR pthreads (7)
|