signal - ANSI C signal handling
void (*signal(int signum, void (*handler))(int)))(int);
The signal system call installs a new signal handler for the
signal with number signum. The signal handler is set to
handler which may be a user specified function, or one of
Ignore the signal.
Reset the signal to its default behavior.
The integer argument that is handed over to the signal
handler routine is the signal number. This makes it possible
to use one signal handler for several signals.
signal returns the previous value of the signal handler, or
SIG_ERR on error.
Signal handlers cannot be set for SIGKILL or SIGSTOP.
Unlike on BSD systems, signals under Linux are reset to
their default behavior when raised. However, if you include
<bsd/signal.h> instead of <signal.h> then signal is rede-
fined as __bsd_signal and signal has the BSD semantics.
Both versions of signal are library routines built on top of
If you're confused by the prototype at the top of this man-
page, it may help to see it separated out thus:
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler));
According to POSIX, the behaviour of a process is undefined
after it ignores a SIGFPE, SIGILL, or SIGSEGV signal that
was not generated by the kill() or the raise() functions.
Integer division by zero has undefined result. On some
architectures it will generate a SIGFPE signal. (Also
dividing the most negative integer by -1 may generate
SIGFPE.) Ignoring this signal might lead to an endless
According to POSIX (B.22.214.171.124) you must not set the action
for SIGCHLD to SIG_IGN. Here the BSD and SYSV behaviours
differ, causing BSD software that sets the action for
SIGCHLD to SIG_IGN to fail on Linux.
kill(1), kill(2), killpg(2), sigaction(2), signal(7), sig-