4BSD/usr/man/cat2/signal.2
SIGNAL(2) UNIX Programmer's Manual SIGNAL(2)
NAME
signal - catch or ignore signals
SYNOPSIS
#include <signal.h>
(*signal(sig, func))()
void (*func)();
DESCRIPTION
_N._B.: The system currently supports two signal implementa-
tions. The one described here is standard in version 7 UNIX
systems, and is retained for backward compatabililty. The
one described in _s_i_g_s_y_s(2) as supplemented by _s_i_g_s_e_t(3) pro-
vides for the needs of the job control mechanisms used by
_c_s_h(1), and corrects the bugs in this older implementation
of signals, allowing programs which process interrupts to be
written reliably.
A signal is generated by some abnormal event, initiated
either by user at a terminal (quit, interrupt), by a program
error (bus error, etc.), or by request of another program
(kill). Normally all signals cause termination of the
receiving process, but a _s_i_g_n_a_l call allows them either to
be ignored or to cause an interrupt to a specified location.
Here is the list of signals with names as in the include
file.
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
16 unassigned
_N._B.: There are actually more signals; see _s_i_g_s_y_s(2); the
signals listed here are those of standard version 7.
The starred signals in the list above cause a core image if
not caught or ignored.
If _f_u_n_c is SIG_DFL, the default action for signal _s_i_g is
reinstated; this default is termination, sometimes with a
Printed 11/10/80 1
SIGNAL(2) UNIX Programmer's Manual SIGNAL(2)
core image. If _f_u_n_c is SIG_IGN the signal is ignored. Oth-
erwise when the signal occurs _f_u_n_c will be called with the
signal number as argument. A return from the function will
continue the process at the point it was interrupted.
Except as indicated, a signal is reset to SIG_DFL after
being caught. Thus if it is desired to catch every such
signal, the catching routine must issue another _s_i_g_n_a_l call.
If, when using this (older) signal interface, a caught sig-
nal occurs during certain system calls, the call terminates
prematurely. In particular this can occur during an _i_o_c_t_l,
_r_e_a_d, or _w_r_i_t_e(2) on a slow device (like a terminal; but not
a file); and during _p_a_u_s_e or _w_a_i_t(2). When such a signal
occurs, the saved user status is arranged in such a way that
when return from the signal-catching takes place, it will
appear that the system call returned an error status. The
user's program may then, if it wishes, re-execute the call.
The value of _s_i_g_n_a_l is the previous (or initial) value of
_f_u_n_c for the particular signal.
After a _f_o_r_k(2) the child inherits all signals. _E_x_e_c(2)
resets all caught signals to default action.
If a process is using the mechanisms of _s_i_g_s_y_s(2) and _s_i_g_-
_s_e_t(3) then many of these calls are automatically restarted
(See _s_i_g_s_y_s(2) and _j_o_b_s(3) for details).
SEE ALSO
sigsys(2), kill(1), kill(2), ptrace(2), setjmp(3), sigset(3)
DIAGNOSTICS
The value (int)-1 is returned if the given signal is out of
range.
BUGS
The traps should be distinguishable by extra arguments to
the signal handler, and all hardware supplied parameters
should be made available to the signal routine.
If a repeated signal arrives before the last one can be
reset, there is no chance to catch it (however this is not
true if you use _s_i_g_s_y_s(2) and _s_i_g_s_e_t(3)).
The type specification of the routine and its _f_u_n_c argument
are problematical.
ASSEMBLER (PDP-11)
(signal = 48.)
sys signal; sig; label
(old label in r0)
Printed 11/10/80 2
SIGNAL(2) UNIX Programmer's Manual SIGNAL(2)
If _l_a_b_e_l is 0, default action is reinstated. If _l_a_b_e_l is 1,
the signal is ignored. Any other even _l_a_b_e_l specifies an
address in the process where an interrupt is simulated. An
RTI or RTT instruction will return from the interrupt.
NOTES (VAX-11)
See _s_i_g_s_y_s(2) for information on how hardware faults are
mapped into signals.
Printed 11/10/80 3