1.\" Copyright (c) 1980, 1991, 1993 2.\" The Regents of the University of California. All rights reserved. 3.\" 4.\" Redistribution and use in source and binary forms, with or without 5.\" modification, are permitted provided that the following conditions 6.\" are met: 7.\" 1. Redistributions of source code must retain the above copyright 8.\" notice, this list of conditions and the following disclaimer. 9.\" 2. Redistributions in binary form must reproduce the above copyright 10.\" notice, this list of conditions and the following disclaimer in the 11.\" documentation and/or other materials provided with the distribution. 12.\" 3. All advertising materials mentioning features or use of this software 13.\" must display the following acknowledgement: 14.\" This product includes software developed by the University of 15.\" California, Berkeley and its contributors. 16.\" 4. Neither the name of the University nor the names of its contributors 17.\" may be used to endorse or promote products derived from this software 18.\" without specific prior written permission. 19.\" 20.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 21.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 24.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30.\" SUCH DAMAGE. 31.\" 32.\" @(#)signal.3 8.3 (Berkeley) 4/19/94 33.\" $FreeBSD$ 34.\" 35.Dd June 7, 2004 36.Dt SIGNAL 3 37.Os 38.Sh NAME 39.Nm signal 40.Nd simplified software signal facilities 41.Sh LIBRARY 42.Lb libc 43.Sh SYNOPSIS 44.In signal.h 45.\" XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 46.\" The prototype for signal(3) cannot be cleanly marked up in -mdoc 47.\" without the following lower-level tweak. 48.nr in-synopsis-section 0 49.Pp 50.Ft "void \*(lp*" Ns 51.Fo signal 52.Fa "int sig" 53.Fa "void \*(lp*func\*(rp\*(lpint\*(rp" 54.Fc Ns 55.Ft "\*(rp\*(lpint\*(rp" ; 56.Pp 57.nr in-synopsis-section 1 58.\" XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX XXX 59or in 60.Fx Ap s 61equivalent but easier to read typedef'd version: 62.Ft typedef "void \*(lp*sig_t\*(rp \*(lpint\*(rp" ; 63.Pp 64.Ft sig_t 65.Fn signal "int sig" "sig_t func" 66.Sh DESCRIPTION 67This 68.Fn signal 69facility 70is a simplified interface to the more general 71.Xr sigaction 2 72facility. 73.Pp 74Signals allow the manipulation of a process from outside its 75domain as well as allowing the process to manipulate itself or 76copies of itself (children). 77There are two general types of signals: 78those that cause termination of a process and those that do not. 79Signals which cause termination of a program might result from 80an irrecoverable error or might be the result of a user at a terminal 81typing the `interrupt' character. 82Signals are used when a process is stopped because it wishes to access 83its control terminal while in the background (see 84.Xr tty 4 ) . 85Signals are optionally generated 86when a process resumes after being stopped, 87when the status of child processes changes, 88or when input is ready at the control terminal. 89Most signals result in the termination of the process receiving them 90if no action 91is taken; some signals instead cause the process receiving them 92to be stopped, or are simply discarded if the process has not 93requested otherwise. 94Except for the 95.Dv SIGKILL 96and 97.Dv SIGSTOP 98signals, the 99.Fn signal 100function allows for a signal to be caught, to be ignored, or to generate 101an interrupt. 102These signals are defined in the file 103.In signal.h : 104.Bl -column No ".Dv SIGVTALRM" "create core image" 105.It Sy "No Name Default Action Description" 106.It 1 Ta Dv SIGHUP Ta "terminate process" Ta "terminal line hangup" 107.It 2 Ta Dv SIGINT Ta "terminate process" Ta "interrupt program" 108.It 3 Ta Dv SIGQUIT Ta "create core image" Ta "quit program" 109.It 4 Ta Dv SIGILL Ta "create core image" Ta "illegal instruction" 110.It 5 Ta Dv SIGTRAP Ta "create core image" Ta "trace trap" 111.It 6 Ta Dv SIGABRT Ta "create core image" Ta "abort program" 112(formerly 113.Dv SIGIOT ) 114.It 7 Ta Dv SIGEMT Ta "create core image" Ta "emulate instruction executed" 115.It 8 Ta Dv SIGFPE Ta "create core image" Ta "floating-point exception" 116.It 9 Ta Dv SIGKILL Ta "terminate process" Ta "kill program" 117.It 10 Ta Dv SIGBUS Ta "create core image" Ta "bus error" 118.It 11 Ta Dv SIGSEGV Ta "create core image" Ta "segmentation violation" 119.It 12 Ta Dv SIGSYS Ta "create core image" Ta "non-existent system call invoked" 120.It 13 Ta Dv SIGPIPE Ta "terminate process" Ta "write on a pipe with no reader" 121.It 14 Ta Dv SIGALRM Ta "terminate process" Ta "real-time timer expired" 122.It 15 Ta Dv SIGTERM Ta "terminate process" Ta "software termination signal" 123.It 16 Ta Dv SIGURG Ta "discard signal" Ta "urgent condition present on socket" 124.It 17 Ta Dv SIGSTOP Ta "stop process" Ta "stop (cannot be caught or ignored)" 125.It 18 Ta Dv SIGTSTP Ta "stop process" Ta "stop signal generated from keyboard" 126.It 19 Ta Dv SIGCONT Ta "discard signal" Ta "continue after stop" 127.It 20 Ta Dv SIGCHLD Ta "discard signal" Ta "child status has changed" 128.It 21 Ta Dv SIGTTIN Ta "stop process" Ta "background read attempted from" 129control terminal 130.It 22 Ta Dv SIGTTOU Ta "stop process" Ta "background write attempted to" 131control terminal 132.It 23 Ta Dv SIGIO Ta "discard signal" Ta Tn "I/O" 133is possible on a descriptor (see 134.Xr fcntl 2 ) 135.It 24 Ta Dv SIGXCPU Ta "terminate process" Ta "cpu time limit exceeded (see" 136.Xr setrlimit 2 ) 137.It 25 Ta Dv SIGXFSZ Ta "terminate process" Ta "file size limit exceeded (see" 138.Xr setrlimit 2 ) 139.It 26 Ta Dv SIGVTALRM Ta "terminate process" Ta "virtual time alarm (see" 140.Xr setitimer 2 ) 141.It 27 Ta Dv SIGPROF Ta "terminate process" Ta "profiling timer alarm (see" 142.Xr setitimer 2 ) 143.It 28 Ta Dv SIGWINCH Ta "discard signal" Ta "Window size change" 144.It 29 Ta Dv SIGINFO Ta "discard signal" Ta "status request from keyboard" 145.It 30 Ta Dv SIGUSR1 Ta "terminate process" Ta "User defined signal 1" 146.It 31 Ta Dv SIGUSR2 Ta "terminate process" Ta "User defined signal 2" 147.It 32 Ta Dv SIGTHR Ta "terminate process" Ta "thread interrupt" 148.El 149.Pp 150The 151.Fa sig 152argument specifies which signal was received. 153The 154.Fa func 155procedure allows a user to choose the action upon receipt of a signal. 156To set the default action of the signal to occur as listed above, 157.Fa func 158should be 159.Dv SIG_DFL . 160A 161.Dv SIG_DFL 162resets the default action. 163To ignore the signal 164.Fa func 165should be 166.Dv SIG_IGN . 167This will cause subsequent instances of the signal to be ignored 168and pending instances to be discarded. 169If 170.Dv SIG_IGN 171is not used, 172further occurrences of the signal are 173automatically blocked and 174.Fa func 175is called. 176.Pp 177The handled signal is unblocked when the 178function returns and 179the process continues from where it left off when the signal occurred. 180.Bf -symbolic 181Unlike previous signal facilities, the handler 182func() remains installed after a signal has been delivered. 183.Ef 184.Pp 185For some system calls, if a signal is caught while the call is 186executing and the call is prematurely terminated, 187the call is automatically restarted. 188(The handler is installed using the 189.Dv SA_RESTART 190flag with 191.Xr sigaction 2 . ) 192The affected system calls include 193.Xr read 2 , 194.Xr write 2 , 195.Xr sendto 2 , 196.Xr recvfrom 2 , 197.Xr sendmsg 2 198and 199.Xr recvmsg 2 200on a communications channel or a low speed device 201and during a 202.Xr ioctl 2 203or 204.Xr wait 2 . 205However, calls that have already committed are not restarted, 206but instead return a partial success (for example, a short read count). 207These semantics could be changed with 208.Xr siginterrupt 3 . 209.Pp 210When a process which has installed signal handlers forks, 211the child process inherits the signals. 212All caught signals may be reset to their default action by a call 213to the 214.Xr execve 2 215function; 216ignored signals remain ignored. 217.Pp 218If a process explicitly specifies 219.Dv SIG_IGN 220as the action for the signal 221.Dv SIGCHLD , 222the system will not create zombie processes when children 223of the calling process exit. 224As a consequence, the system will discard the exit status 225from the child processes. 226If the calling process subsequently issues a call to 227.Xr wait 2 228or equivalent, it will block until all of the calling process's 229children terminate, and then return a value of \-1 with 230.Va errno 231set to 232.Er ECHILD . 233.Pp 234See 235.Xr sigaction 2 236for a list of functions 237that are considered safe for use in signal handlers. 238.Sh RETURN VALUES 239The previous action is returned on a successful call. 240Otherwise, SIG_ERR is returned and the global variable 241.Va errno 242is set to indicate the error. 243.Sh ERRORS 244The 245.Fn signal 246function 247will fail and no action will take place if one of the 248following occur: 249.Bl -tag -width Er 250.It Bq Er EINVAL 251The 252.Fa sig 253argument 254is not a valid signal number. 255.It Bq Er EINVAL 256An attempt is made to ignore or supply a handler for 257.Dv SIGKILL 258or 259.Dv SIGSTOP . 260.El 261.Sh SEE ALSO 262.Xr kill 1 , 263.Xr kill 2 , 264.Xr ptrace 2 , 265.Xr sigaction 2 , 266.Xr sigaltstack 2 , 267.Xr sigprocmask 2 , 268.Xr sigsuspend 2 , 269.Xr wait 2 , 270.Xr fpsetmask 3 , 271.Xr setjmp 3 , 272.Xr siginterrupt 3 , 273.Xr tty 4 274.Sh HISTORY 275The 276.Nm 277facility appeared in 278.Bx 4.0 . 279The option to avoid the creation of child zombies through ignoring 280.Dv SIGCHLD 281appeared in 282.Fx 5.0 . 283