term% cat index.txt SIGNAL(2) System Calls Manual SIGNAL(2)
NAME
signal - catch or ignore signals
SYNOPSIS
#include <signal.h>
int (*signal(sig, func))()
int (*func)();
DESCRIPTION
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 signal call allows them ei‐
ther 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
SIGSTOP 17+ stop (cannot be caught, held or ignored)
SIGCONT 19# continue a stopped process
SIGCHLD 20# child has stopped or exited
* causes core image if not caught or ignored
+ suspends process until SIGCONT or PIOCRUN, see proc(4)
# ignored if not caught
Signals 1 through NSIG, defined in the include file, exist. Those not
listed above have no conventional meaning in this system. (Berkeley
systems use 1-15 and 17-25).
If func is SIG_DFL, the default action for signal sig is reinstated;
this default is termination, sometimes with a core image. If func is
SIG_IGN the signal is ignored. Otherwise when the signal occurs func
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 signal call.
When a caught signal occurs during certain system calls, the call ter‐
minates prematurely. In particular this can occur during read or
write(2) on a slow device (like a typewriter; but not a file); and dur‐
ing pause and wait(2). When such a signal occurs, the saved user sta‐
tus is arranged so 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 signal is the previous (or initial) value of func for the
particular signal.
After a fork(2) the child inherits all signals. Exec(2) resets all
caught signals to default action.
SEE ALSO
kill(1), kill(2), setjmp(3), proc(4)
DIAGNOSTICS
The value (int)-1 is returned if the given signal is out of range.
BUGS
Unadvertised and unsupported func arguments can radically and perma‐
nently change the behavior of signals.
Trap syndromes should be distinguishable by extra arguments to the sig‐
nal handler.
If a repeated signal arrives before the last one can be reset, there is
no chance to catch it.
The type specification of the routine and its func argument are prob‐
lematical. At the very least the type should be ‘void (*)()'.
SIGNAL(2)