NAME

     signal - ANSI C signal handling



SYNOPSIS

     #include <signal.h>


     void (*signal(int signum, void (*handler))(int)))(int);



DESCRIPTION

     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
     the following:

          SIG_IGN
               Ignore the signal.

          SIG_DFL
               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.



RETURN VALUE

     signal returns the previous value of the signal handler,  or
     SIG_ERR on error.



NOTES

     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
     sigaction(2).

     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
     loop.

     According to POSIX (B.3.3.1.3) 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.



CONFORMING TO

     ANSI C



SEE ALSO

     kill(1), kill(2), killpg(2), sigaction(2),  signal(7),  sig-
     setops(3), alarm(2).