| '\" t |
| .\" Copyright (c) 1993 by Thomas Koenig (ig25@rz.uni-karlsruhe.de) |
| .\" 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> |
| .\" |
| .\" 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@gmail.com> |
| .\" Modified 7 Jun 2002, by Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" Added information on real-time signals |
| .\" Modified 13 Jun 2002, by Michael Kerrisk <mtk.manpages@gmail.com> |
| .\" 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. |
| .\" 2008-07-04, mtk: |
| .\" Added section on system call restarting (SA_RESTART) |
| .\" Added section on stop/cont signals interrupting syscalls. |
| .\" |
| .TH SIGNAL 7 2008-07-07 "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 behaviors 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 ix86, ia64, ppc, s390, arm and sh, |
| and the last one for mips. |
| .\" parisc is a law unto itself |
| 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 for \fBSIGIO\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.) |
| By contrast, if multiple standard signals are pending for a process, |
| the order in which they are delivered is unspecified. |
| .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 program. |
| 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-2004 (also known as POSIX.1-2001 Technical Corrigendum 2) |
| requires an implementation to guarantee that the following |
| functions can be safely called inside a signal handler: |
| .\" FIXME . SUSv4 adds functions to this list, and removes a few. |
| |
| .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() |
| sockatmark() |
| 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() |
| .fi |
| .in |
| .SS Interruption of System Calls and Library Functions by Signal Handlers |
| 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 |
| .BR EINTR . |
| .PP |
| Which of these two behaviors occurs depends on the interface and |
| whether or not the signal handler was established using the |
| .BR SA_RESTART |
| flag (see |
| .BR sigaction (2)). |
| The details vary across Unix systems; |
| below, the details for Linux. |
| |
| 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 |
| .BR SA_RESTART |
| flag was used; otherwise the call will fail with the error |
| .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. |
| A "slow" device is one where the I/O call may block for an |
| indefinite time, for example, a terminal, pipe, or socket. |
| (A disk is not a slow device according to this definition.) |
| If an I/O call on a slow device has already transferred some |
| data by the time it is interrupted by a signal handler, |
| then the call will return a success status |
| (normally, the number of bytes transferred). |
| .IP * |
| .BR open (2), |
| if it can block (e.g., when opening a FIFO; see |
| .BR fifo (7)). |
| .IP * |
| .BR wait (2), |
| .BR wait3 (2), |
| .BR wait4 (2), |
| .BR waitid (2), |
| and |
| .BR waitpid (2). |
| .IP * |
| Socket interfaces: |
| .\" If a timeout (setsockopt()) is in effect on the socket, then these |
| .\" 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: |
| .BR mq_receive (3), |
| .BR mq_timedreceive (3), |
| .BR mq_send (3), |
| and |
| .BR mq_timedsend (3). |
| .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 |
| .BR SA_RESTART ; |
| they always fail with the error |
| .B EINTR |
| when interrupted by a signal handler: |
| .\" 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), |
| .BR sigtimedwait (2), |
| 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 * |
| System V IPC interfaces: |
| .\" 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 |
| .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. |
| .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 |
| .SH "CONFORMING TO" |
| POSIX.1, except as noted. |
| .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 getrlimit (2), |
| .BR kill (2), |
| .BR killpg (2), |
| .BR setitimer (2), |
| .BR setrlimit (2), |
| .BR sgetmask (2), |
| .BR sigaction (2), |
| .BR sigaltstack (2), |
| .BR signal (2), |
| .BR signalfd (2), |
| .BR sigpending (2), |
| .BR sigprocmask (2), |
| .BR sigqueue (2), |
| .BR sigsuspend (2), |
| .BR sigwaitinfo (2), |
| .BR abort (3), |
| .BR bsd_signal (3), |
| .BR longjmp (3), |
| .BR raise (3), |
| .BR sigset (3), |
| .BR sigsetops (3), |
| .BR sigvec (3), |
| .BR sigwait (3), |
| .BR strsignal (3), |
| .BR sysv_signal (3), |
| .BR core (5), |
| .BR proc (5), |
| .BR pthreads (7) |