NAME

     sigaction, signal - manage signal state and handlers


SYNOPSIS

     #include <signal.h>

     int sigaction(int sig, const struct sigaction  *act,  struct
          sigaction *oact)
     void (*signal(int sig, void (*handler)(int)))(int);


DESCRIPTION

     Sigaction() is used to examine, set, or  modify  the  attri-
     butes  of a signal.  The argument sig is the signal in ques-
     tion.  The act argument points to a structure containing the
     new  attributes  of  the signal, the structure pointed to by
     oact will receive the old attributes  that  were  in  effect
     before the call.

     The act and oact arguments may  be  NULL  to  indicate  that
     either  no  new  attributes  are  to be set, or that the old
     attributes are not of interest.

     The structure containing the signal attributes is defined in
     <signal.h> and looks like this:

          struct sigaction {
              void        (*sa_handler)(int sig);
              sigset_t    sa_mask;
              int         sa_flags;
          };

     The sa_handler  field  contains  the  address  of  a  signal
     handler,  a function that is called when the process is sig-
     nalled, or one of these special constants:

     SIG_DFL     Default signal  handling  is  to  be  performed.
                 This  usually  means that the process is killed,
                 but some signals may be ignored by default.

     SIG_IGN     Ignore the signal.

     The sa_mask field indicates a set of signals  that  must  be
     blocked  when the signal is being handled.  Whether the sig-
     nal sig itself is blocked when being  handled  is  not  con-
     trolled  by  this  mask.  The mask is of a "signal set" type
     that is to be manipulated by the sigset(3) functions.

     How the signal is handled precisely is specified by bits  in
     sa_flags.   If  none of the flags is set then the handler is
     called when the signal arrives.  The signal is blocked  dur-
     ing  the call to the handler, and unblocked when the handler
     returns.  A system call that is interrupted returns -1  with
     errno  set  to EINTR.  The following bit flags can be set to
     modify this behaviour:

     SA_RESETHAND   Reset the signal handler to SIG_DFL when  the
                    signal is caught.

     SA_NODEFER     Do not block  the  signal  on  entry  to  the
                    handler.

     SA_COMPAT      Handle the signal in a way that is compatible
                    with the the old signal() call.

     The old signal() signal system call sets  a  signal  handler
     for  a  given signal and returns the old signal handler.  No
     signals are blocked, the flags are SA_RESETHAND | SA_NODEFER
     |  SA_COMPAT.   New code should not use signal().  Note that
     signal() and all of the SA_* flags are MINIX 3 extensions.

     Signal handlers are reset to SIG_DFL on an execve(2).   Sig-
     nals that are ignored stay ignored.

  Signals
     MINIX 3 knows about the following signals:

     signal     num    notes   description

     SIGHUP     1      k       Hangup
     SIGINT     2      k       Interrupt (usually DEL or CTRL-C)
     SIGQUIT    3      kc      Quit (usually CTRL-\)
     SIGILL     4      kc      Illegal instruction
     SIGTRAP    5      xkc     Trace trap
     SIGABRT    6      kc      Abort program
     SIGFPE     8      k       Floating point exception
     SIGKILL    9      k       Kill
     SIGUSR1    10     k       User defined signal #1
     SIGSEGV    11     kc      Segmentation fault
     SIGUSR2    12     k       User defined signal #2
     SIGPIPE    13     k       Write to a pipe with no reader
     SIGALRM    14     k       Alarm clock
     SIGTERM    15     k       Terminate (default for kill(1))
     SIGCHLD    17     pvi     Child process terminated
     SIGCONT    18     p       Continue if stopped
     SIGSTOP    19     ps      Stop signal
     SIGTSTP    20     ps      Interactive stop signal
     SIGTTIN    21     ps      Background read
     SIGTTOU    22     ps      Background write
     SIGWINCH   23     xvi     Window size change

     The letters in the notes column indicate:

     k    The process is killed if the signal is not caught.

     c    The signal causes a core dump.

     i    The signal is ignored if not caught.

     v    Only Minix-vmd implements this signal.

     x    MINIX 3 extension, not defined by POSIX.

     p    These signals are not implemented, but  POSIX  requires
          that they are defined.

     s    The process should be stopped, but is killed instead.

     The SIGKILL signal cannot be caught or ignored.  The  SIGILL
     and SIGTRAP signals cannot be automatically reset.  The sys-
     tem silently enforces these restrictions.  This may  or  may
     not  be reflected by the attributes of these signals and the
     signal masks.

  Types
     POSIX prescribes that <sys/types.h> has the following defin-
     ition:

          typedef int (*sighandler_t)(int)

     With this type the following declarations can be made:

          sighandler_t sa_handler;
          sighandler_t signal(int sig, sighandler_t handler);

     This may help you to  understand  the  earlier  declarations
     better.   The  sighandler_t  type is also very useful in old
     style C code that is compiled by a compiler for standard C.


SEE ALSO

     kill(1), kill(2), pause(2),  sigprocmask(2),  sigsuspend(2),
     sigpending(2), sigset(3).


DIAGNOSTICS

     Sigaction() returns 0 on success or -1 on  error.   Signal()
     returns the old handler on success or SIG_ERR on error.  The
     error code may be:

     EINVAL    Bad signal number.

     EFAULT    Bad act or oact addresses.


AUTHOR

     Kees J. Bot (kjb@cs.vu.nl)