glenda.party
term% ls -F
term% cat index.txt
SIGNAL(2)                     System Calls Manual                    SIGNAL(2)



NAME
       signal - catch or ignore signals

SYNOPSIS
       #include <signal.h>

       int (*signal(sig, func))()
       int (*func)();

DESCRIPTION
       A  signal is generated by some abnormal event, initiated either by user
       at a terminal (quit, interrupt), by a program error (bus error,  etc.),
       or  by  request  of another program (kill).  Normally all signals cause
       termination of the receiving process, but a signal call allows them ei‐
       ther  to  be  ignored or to cause an interrupt to a specified location.
       Here is the list of signals with names as in the include file.

       SIGHUP  1    hangup
       SIGINT  2    interrupt
       SIGQUIT 3*   quit
       SIGILL  4*   illegal instruction (not reset when caught)
       SIGTRAP 5*   trace trap (not reset when caught)
       SIGIOT  6*   IOT instruction
       SIGEMT  7*   EMT instruction
       SIGFPE  8*   floating point exception
       SIGKILL 9    kill (cannot be caught or ignored)
       SIGBUS  10*  bus error
       SIGSEGV 11*  segmentation violation
       SIGSYS  12*  bad argument to system call
       SIGPIPE 13   write on a pipe with no one to read it
       SIGALRM 14   alarm clock
       SIGTERM 15   software termination signal
               16   unassigned
       SIGSTOP 17+  stop (cannot be caught, held or ignored)
       SIGCONT 19#  continue a stopped process
       SIGCHLD 20#  child has stopped or exited

       *       causes core image if not caught or ignored
       +       suspends process until SIGCONT or PIOCRUN, see proc(4)
       #       ignored if not caught

       Signals 1 through NSIG, defined in the include file, exist.  Those  not
       listed  above  have  no conventional meaning in this system.  (Berkeley
       systems use 1-15 and 17-25).

       If func is SIG_DFL, the default action for signal  sig  is  reinstated;
       this  default  is termination, sometimes with a core image.  If func is
       SIG_IGN the signal is ignored.  Otherwise when the signal  occurs  func
       will  be  called with the signal number as argument.  A return from the
       function will continue the process at the point it was interrupted.

       Except as indicated, a signal is reset to SIG_DFL after  being  caught.
       Thus  if it is desired to catch every such signal, the catching routine
       must issue another signal call.

       When a caught signal occurs during certain system calls, the call  ter‐
       minates  prematurely.   In  particular  this  can  occur during read or
       write(2) on a slow device (like a typewriter; but not a file); and dur‐
       ing  pause and wait(2).  When such a signal occurs, the saved user sta‐
       tus is arranged so that when  return  from  the  signal-catching  takes
       place,  it  will  appear that the system call returned an error status.
       The user's program may then, if it wishes, re-execute the call.

       The value of signal is the previous (or initial) value of func for  the
       particular signal.

       After  a  fork(2)  the  child inherits all signals.  Exec(2) resets all
       caught signals to default action.

SEE ALSO
       kill(1), kill(2), setjmp(3), proc(4)

DIAGNOSTICS
       The value (int)-1 is returned if the given signal is out of range.

BUGS
       Unadvertised and unsupported func arguments can  radically  and  perma‐
       nently change the behavior of signals.
       Trap syndromes should be distinguishable by extra arguments to the sig‐
       nal handler.
       If a repeated signal arrives before the last one can be reset, there is
       no chance to catch it.
       The  type  specification of the routine and its func argument are prob‐
       lematical.  At the very least the type should be `void (*)()'.



                                                                     SIGNAL(2)