SIGNAL(3C) BSD SIGNAL(3C)
NAME
signal - simplified software signal facilities
SYNOPSIS
#include <signal.h>
(*signal(sig, func))()
int (*func)();
DESCRIPTION
signal is a simplified interface to the more general sigvec(2) facility.
A signal is generated by some abnormal event, initiated by a user at a
terminal (quit, interrupt, stop), by a program error (bus error, etc.),
by request of another program (kill), or when a process is stopped
because it wishes to access its control terminal while in the background
(see tty(4)). Signals are optionally generated when a process resumes
after being stopped, when the status of child processes changes, or when
input is ready at the control terminal. Most signals cause termination
of the receiving process if no action is taken; some signals instead
cause the process receiving them to be stopped, or are simply discarded
if the process has not requested otherwise. Except for the SIGKILL and
SIGSTOP signals, the signal call allows signals either to be ignored or
to cause an interrupt to a specified location. The following is a list
of all signals with names as in the include file <sys/signal.h>:
SIGHUP 1 hangup
SIGINT 2* interrupt
SIGQUIT 3* quit
SIGILL 4* illegal instruction (not reset when caught)
SIGTRAP 5* trace trap (not reset when caught)
SIGIOT 6* IOT instruction
SIGEMT 7* EMT instruction
SIGFPE 8* floating point exception
SIGKILL 9 kill (cannot be caught or ignored)
SIGBUS 10* bus error
SIGSEGV 11* segmentation violation
SIGSYS 12* bad argument to system call
SIGPIPE 13 write on a pipe with no one to read it
SIGALRM 14 alarm clock
SIGTERM 15 software termination signal from kill
SIGUSR1 16 user defined signal 1
SIGUSR2 17 user defined signal 2
SIGCLD 18 death of a child
SIGAPOLLO 19 Apollo-specific fault
SIGSTOP 20† sendable stop signal not from tty
SIGTSTP 21† stop signal from tty
SIGCONT 22@ continue a stopped process
SIGCHLD 23@ to parent on child stop or exit
SIGTTIN 24† to readers pgrp upon background tty read
SIGTTOU 25† like TTIN for output if (tp->t_local<OSTOP)
SIGIO 26@ input/output possible signal (see fcntl(2))
SIGTINT 26 input record is available at control terminal
SIGXCPU 27 exceeded CPU time limit (see getrlimit(2))
SIGXFSZ 28 exceeded file size limit (see getrlimit(2))
SIGVTALRM 29 virtual time alarm (see getitimer(2))
SIGPROF 30 profiling time alarm (see setitimer(2))
SIGURG 31@ urgent condition on IO channel
SIGWINCH 32@ window size changes
If not caught or ignored, signals marked with an asterisk (*) result in a
process dump, which you can analyze using tb(1) (some UNIX
implementations will create a core image).
If func is SIG_DFL, the default action for signal sig is reinstated; this
default is termination (with a core image for starred signals) except for
signals marked with @ or †. Signals marked with @ are discarded if the
action is SIG_DFL; signals marked with † cause the process to stop. If
func is SIG_IGN the signal is subsequently ignored and pending instances
of the signal are discarded. Otherwise, when the signal occurs further
occurrences of the signal are automatically blocked and func is called.
A return from the function unblocks the handled signal and continues the
process at the point it was interrupted. Unlike previous signal
facilities, the handler func remains installed after a signal has been
delivered.
If a caught signal occurs during certain system calls, causing the call
to terminate prematurely, the call is automatically restarted. In
particular this can occur during a read(2) or write(2) on a slow device
(such as a terminal, but not a file) and during a wait(2).
The value of signal is the previous (or initial) value of func for the
particular signal.
After a fork(2) or vfork(2), the child inherits all signals. execve(2)
resets all caught signals to the default action; ignored signals remain
ignored.
ERRORS
signal will fail and no action will take place if one of the following
occur:
[EINVAL] sig is not a valid signal number.
[EINVAL] An attempt is made to ignore or supply a handler for SIGKILL
or SIGSTOP.
[EINVAL] An attempt is made to ignore SIGCONT (by default SIGCONT is
ignored).
SEE ALSO
kill(1), ptrace(2), kill(2), sigvec(2), sigblock(2), sigsetmask(2),
sigpause(2), sigstack(2), setjmp(3), tty(4)
DIAGNOSTICS
A successful call returns the previous action. A failed call returns -1
and sets errno as indicated under "Errors."
NOTES
BSD sends SIGAPOLLO whenever a fault occurs that is not otherwise mapped
into a signal. Typical generators of SIGAPOLLO include network failures,
display-acquire timeouts, and disk full errors.
When programming for BSD, use SIGCHLD (not SIGCLD) to be signaled when a
child changes state. SIGCHLD is generated for a process whenever one of
that process' immediate children changes state in such a way that it can
be waited for by wait(2): dies, becomes suspended due to one of the
suspend signals, or stops due to receiving a signal while being traced
(ptrace(2)).
Multiple occurrences of a signal received while the handler is blocked by
a wait(2) call are not stacked; only one instance of the signal is
delivered. To receive all occurrences, the handler must not be blocked
so it can loop and wait for children until no more are found. If a
signal handler must not block while waiting for the status of a child, it
should use wait3 with the appropriate option (WNOHANG or WUNTRACED).
(See wait(2)).
The handler routine can be declared:
handler(sig, code, scp)
Here sig is the signal number, into which the hardware faults and traps
are mapped as defined below. code is a parameter which is either a
constant as given below or, for compatibility mode faults, the code
provided by the hardware. scp is a pointer to the struct sigcontext used
by the system to restore the process context from before the signal.
Compatibility mode faults are distinguished from the other SIGILL traps
by having PSL_CM set in the psl.
The following defines the mapping of hardware traps to signals and codes.
All of these symbols are defined in <sys/signal.h>:
Hardware condition Signal Code
Arithmetic traps:
Integer overflow SIGFPE FPE_INTOVF_TRAP
Integer division by zero SIGFPE FPE_INTDIV_TRAP
Floating overflow trap SIGFPE FPE_FLTOVF_TRAP
Floating/decimal division by zero SIGFPE FPE_FLTDIV_TRAP
Floating underflow trap SIGFPE FPE_FLTUND_TRAP
Decimal overflow trap SIGFPE FPE_DECOVF_TRAP
Subscript-range SIGFPE FPE_SUBRNG_TRAP
Floating overflow fault SIGFPE FPE_FLTOVF_FAULT
Floating divide by zero fault SIGFPE FPE_FLTDIV_FAULT
Floating underflow fault SIGFPE FPE_FLTUND_FAULT
Length access control SIGSEGV
Protection violation SIGBUS
Reserved instruction SIGILL ILL_RESAD_FAULT
Customer-reserved instr. SIGEMT
Reserved operand SIGILL ILL_PRIVIN_FAULT
Reserved addressing SIGILL ILL_RESOP_FAULT
Trace pending SIGTRAP
Bpt instruction SIGTRAP
Compatibility-mode SIGILL hardware supplied code
Chme SIGSEGV
Chms SIGSEGV
Chmu SIGSEGV