signal
SIGNAL(L)           Linux Programmer's Manual           SIGNAL(L)



NAME
       signal - ANSI C signal handling

SYNOPSIS
       #include <signal.h>

       typedef void (*sighandler_t)(int);

       sighandler_t signal(int signum, sighandler_t handler);

DESCRIPTION
       The signal() system call installs a new signal handler for
       the signal with number signum.  The signal handler is  set
       to  sighandler  which may be a user specified function, or
       either SIG_IGN or SIG_DFL.

       Upon arrival of a signal with number signum the  following
       happens.   If the corresponding handler is set to SIG_IGN,
       then the signal is ignored.  If  the  handler  is  set  to
       SIG_DFL,  then the default action associated to the signal
       (see signal(l)) occurs.  Finally, if the handler is set to
       a  function  sighandler  then  first either the handler is
       reset to SIG_DFL or an  implementation-dependent  blocking
       of  the  signal is performed and next sighandler is called
       with argument signum.

       Using a signal handler function for  a  signal  is  called
       "catching  the  signal".   The signals SIGKILL and SIGSTOP
       cannot be caught or ignored.

RETURN VALUE
       The signal() function returns the previous  value  of  the
       signal handler, or SIG_ERR on error.

PORTABILITY
       The  original  Unix  signal()  would  reset the handler to
       SIG_DFL, and System V (and the Linux kernel  and  libc4,5)
       does  the same.  On the other hand, BSD does not reset the
       handler, but blocks new  instances  of  this  signal  from
       occurring  during  a  call  of  the  handler.   The glibc2
       library follows the BSD behaviour.

       If one on a libc5 system includes  <bsd/signal.h>  instead
       of <signal.h> then signal is redefined as __bsd_signal and
       signal has the BSD semantics.  This is not recommended.

       If one on a glibc2 system defines  a  feature  test  macro
       such as _XOPEN_SOURCE or uses a separate sysv_signal func-
       tion, one obtains classical behaviour.  This is not recom-
       mended.

       Trying  to change the semantics of this call using defines
       and includes is not a good idea.  It is  better  to  avoid
       signal altogether, and use sigaction(n) instead.

NOTES
       According  to  POSIX,  the behaviour of a process is unde-
       fined after it ignores a SIGFPE, SIGILL, or SIGSEGV signal
       that  was  not  generated  by  the kill(l) or the raise(e)
       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 (3.3.1.3) it is unspecified  what  hap-
       pens  when  SIGCHLD  is  set 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.

       The  use of sighandler_t is a GNU extension.  Various ver-
       sions of libc predefine this type; libc4 and libc5  define
       SignalHandler,  glibc  defines sig_t and, when _GNU_SOURCE
       is defined, also sighandler_t.

CONFORMING TO
       ANSI C

SEE ALSO
       kill(l), kill(l), killpg(g),  pause(e),  raise(e),  sigac-
       tion(n), signal(l), sigsetops(s), sigvec(c), alarm(m)



Linux 2.2                   2000-04-28                  SIGNAL(L)