SIGNAL(2) — System Interface Manual — System Calls
NAME
signal − catch or ignore signals
SYNOPSIS
#include <signal.h>
int (∗signal(sig, func))()
int sig;
int (∗func)();
DESCRIPTION
This interface is obsolete and will be replaced in the 4.2 release by an interface compatible with signal(3J) and sigsys(2).
Signal allows the calling process to choose how it will handle the receipt of a specific signal. Sig specifies the signal and func specifies the choice.
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 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.
SIGHUP1hangup
SIGINT2interrupt
SIGQUIT3∗quit
SIGILL4∗illegal instruction (not reset when caught)
SIGTRAP5∗trace trap (not reset when caught)
SIGIOT6∗IOT instruction
SIGEMT7∗EMT instruction
SIGFPE8∗floating point exception
SIGKILL9kill (cannot be caught or ignored)
SIGBUS10∗bus error
SIGSEGV11∗segmentation violation
SIGSYS12∗bad argument to system call
SIGPIPE13write on a pipe with no one to read it
SIGALRM14alarm clock
SIGTERM15software termination signal
SIGURG16urgent condition pending
SIGSTOP17stop (cannot be caught, held or ignored)
SIGTSTP18stop signal generated from keyboard
SIGCONT19continue after stop
SIGCHLD20child status has changed
SIGTTIN21background read attempted from control terminal
SIGTTOU22background write attempted to control terminal
SIGIO23i/o is possible on a descriptor (see setdopts(2))
SIGXCPU24cpu time limit exceeded (see setrlimit(2))
SIGXFSZ25file size limit exceeded (see setrlimit(2))
SIGVTALRM26virtual time alarm (see setitimer(2))
SIGPROF27profiling timer alarm (see setitimer(2))
SIGWINCH28window attributes changed (see window(4))
Signal numbers 1, 2, 4, and 9 may be referred to by their absolute decimal values. All other signals should be referred to symbolically.
The starred signals in the list above cause a core image if not caught or ignored.
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.
If, when using this (older) signal interface, a caught signal occurs during certain system calls, the call terminates prematurely. In particular this can occur during an ioctl, read, or write(2) on a slow device (like a terminal; but not a file); and during pause or wait(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 EINTR. 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.
RETURN VALUE
Upon successful completion, signal returns the previous value of func for the specified signal sig. Otherwise, a value of −1 is returned and errno is set to indicate the error.
ERRORS
Signal will fail if one or more of the following are true:
[EINVAL] Sig is an illegal signal number, including SIGKILL.
[EFAULT] Func points to an illegal address.
CAVEATS
The signal function is not recommended for use as an interprocess communications mechanism.
SEE ALSO
kill(2), pause(2), sigsys(2), signal(3), psignal(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 sigsys(2J) and sigset(3)).
The type specification of the routine and its func argument are problematical.
Sun System Release 0.3 — 23 March 1983