Minix Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
SIGACTION(2)                  System Calls Manual                 SIGACTION(2)

       sigaction, signal - manage signal state and handlers

       #include <signal.h>

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

       Sigaction() is used to examine, set, or  modify  the  attributes  of  a
       signal.   The argument sig is the signal in question.  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

       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 signalled, 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 signal sig itself is  blocked
       when  being  handled  is not controlled 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 during 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

       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

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

       MINIX 3 knows about the following signals:

       signal     num    notes   description

       SIGHUP     1      km      Hangup
       SIGINT     2      k       Interrupt (usually DEL or CTRL-C)
       SIGQUIT    3      kcm     Quit (usually CTRL-\)
       SIGILL     4      Kc      Illegal instruction
       SIGTRAP    5      Kc      Trace trap
       SIGABRT    6      kcm     Abort program
       SIGBUS     7      Kc      Bus error
       SIGFPE     8      Kc      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     km      Terminate (default for kill(1))
       SIGEMT     16     xKc     Emulator trap
       SIGCHLD    17     pi      Child process terminated
       SIGCONT    18     pi      Continue if stopped
       SIGSTOP    19     ps      Stop signal
       SIGTSTP    20     ps      Interactive stop signal
       SIGWINCH   21     xi      Window size change
       SIGTTIN    22     ps      Background read
       SIGTTOU    23     ps      Background write
       SIGVTALRM  24     k       Virtual alarm clock
       SIGPROF    25     k       Profiler alarm clock

       The letters in the notes column indicate:

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

       K    The process is killed if the signal is not caught. If  the  signal
            is  received  due  to  an  exception  while ignored or masked, the
            process is killed even if  a  handler  is  defined  to  catch  the

       c    The signal causes a core dump.

       i    The signal is ignored if not caught.

       m    The signal is converted to a message for system processes.

       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 and SIGSTOP signals  cannot  be  caught  or  ignored.   The
       SIGILL  and  SIGTRAP signals cannot be automatically reset.  The system
       silently enforces these restrictions.  This may or may not be reflected
       by the attributes of these signals and the signal masks.

       POSIX prescribes that <sys/types.h> has the following definition:

              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.

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

       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.

       Kees J. Bot (