Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

kill(1)

ptrace(2)

kill(2)

sigvec(2)

sigblock(2)

sigsetmask(2)

sigpause(2)

sigstack(2)

setjmp(3)

tty(4)

SIGNAL(3C)                           BSD                            SIGNAL(3C)



NAME
     signal - simplified software signal facilities

SYNOPSIS
     #include <signal.h>

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

DESCRIPTION
     signal is a simplified interface to the more general sigvec(2) facility.

     A signal is generated by some abnormal event, initiated by a user at a
     terminal (quit, interrupt, stop), by a program error (bus error, etc.),
     by request of another program (kill), or when a process is stopped
     because it wishes to access its control terminal while in the background
     (see tty(4)).  Signals are optionally generated when a process resumes
     after being stopped, when the status of child processes changes, or when
     input is ready at the control terminal.  Most signals cause termination
     of the receiving process if no action is taken; some signals instead
     cause the process receiving them to be stopped, or are simply discarded
     if the process has not requested otherwise.  Except for the SIGKILL and
     SIGSTOP signals, the signal call allows signals either to be ignored or
     to cause an interrupt to a specified location.  The following is a list
     of all signals with names as in the include file <sys/signal.h>:

     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 from kill
     SIGUSR1   16   user defined signal 1
     SIGUSR2   17   user defined signal 2
     SIGCLD    18   death of a child
     SIGAPOLLO 19   Apollo-specific fault
     SIGSTOP   20†  sendable stop signal not from tty
     SIGTSTP   21†  stop signal from tty
     SIGCONT   22@  continue a stopped process
     SIGCHLD   23@  to parent on child stop or exit
     SIGTTIN   24†  to readers pgrp upon background tty read
     SIGTTOU   25†  like TTIN for output if (tp->t_local&LTOSTOP)
     SIGIO     26@  input/output possible signal (see fcntl(2))
     SIGTINT   26   input record is available at control terminal
     SIGXCPU   27   exceeded CPU time limit (see getrlimit(2))
     SIGXFSZ   28   exceeded file size limit (see getrlimit(2))
     SIGVTALRM 29   virtual time alarm (see getitimer(2))
     SIGPROF   30   profiling time alarm (see setitimer(2))
     SIGURG    31@  urgent condition on IO channel
     SIGWINCH  32@  window size changes

     If not caught or ignored, signals marked with an asterisk (*) result in a
     process dump, which you can analyze using tb(1) (some UNIX
     implementations will create a core image).

     If func is SIG_DFL, the default action for signal sig is reinstated; this
     default is termination (with a core image for starred signals) except for
     signals marked with @ or †.  Signals marked with @ are discarded if the
     action is SIG_DFL; signals marked with † cause the process to stop.  If
     func is SIG_IGN the signal is subsequently ignored and pending instances
     of the signal are discarded.  Otherwise, when the signal occurs further
     occurrences of the signal are automatically blocked and func is called.

     A return from the function unblocks the handled signal and continues the
     process at the point it was interrupted.  Unlike previous signal
     facilities, the handler func remains installed after a signal has been
     delivered.

     If a caught signal occurs during certain system calls, causing the call
     to terminate prematurely, the call is automatically restarted.  In
     particular this can occur during a read(2) or write(2) on a slow device
     (such as a terminal, but not a file) and during a wait(2).

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

     After a fork(2) or vfork(2), the child inherits all signals.  execve(2)
     resets all caught signals to the default action; ignored signals remain
     ignored.

ERRORS
     signal will fail and no action will take place if one of the following
     occur:

     [EINVAL]   sig is not a valid signal number.

     [EINVAL]   An attempt is made to ignore or supply a handler for SIGKILL
                or SIGSTOP.

     [EINVAL]   An attempt is made to ignore SIGCONT (by default SIGCONT is
                ignored).

SEE ALSO
     kill(1), ptrace(2), kill(2), sigvec(2), sigblock(2), sigsetmask(2),
     sigpause(2), sigstack(2), setjmp(3), tty(4)

DIAGNOSTICS
     A successful call returns the previous action.  A failed call returns -1
     and sets errno as indicated under "Errors."

NOTES
     BSD sends SIGAPOLLO whenever a fault occurs that is not otherwise mapped
     into a signal.  Typical generators of SIGAPOLLO include network failures,
     display-acquire timeouts, and disk full errors.

     When programming for BSD, use SIGCHLD (not SIGCLD) to be signaled when a
     child changes state.  SIGCHLD is generated for a process whenever one of
     that process' immediate children changes state in such a way that it can
     be waited for by wait(2):  dies, becomes suspended due to one of the
     suspend signals, or stops due to receiving a signal while being traced
     (ptrace(2)).

     Multiple occurrences of a signal received while the handler is blocked by
     a wait(2) call are not stacked; only one instance of the signal is
     delivered.  To receive all occurrences, the handler must not be blocked
     so it can loop and wait for children until no more are found.  If a
     signal handler must not block while waiting for the status of a child, it
     should use wait3 with the appropriate option (WNOHANG or WUNTRACED).
     (See wait(2)).

     The handler routine can be declared:

          handler(sig, code, scp)

     Here sig is the signal number, into which the hardware faults and traps
     are mapped as defined below.  code is a parameter which is either a
     constant as given below or, for compatibility mode faults, the code
     provided by the hardware.  scp is a pointer to the struct sigcontext used
     by the system to restore the process context from before the signal.
     Compatibility mode faults are distinguished from the other SIGILL traps
     by having PSL_CM set in the psl.

     The following defines the mapping of hardware traps to signals and codes.
     All of these symbols are defined in <sys/signal.h>:

        Hardware condition                  Signal       Code

     Arithmetic traps:
        Integer overflow                    SIGFPE       FPE_INTOVF_TRAP
        Integer division by zero            SIGFPE       FPE_INTDIV_TRAP
        Floating overflow trap              SIGFPE       FPE_FLTOVF_TRAP
        Floating/decimal division by zero   SIGFPE       FPE_FLTDIV_TRAP
        Floating underflow trap             SIGFPE       FPE_FLTUND_TRAP
        Decimal overflow trap               SIGFPE       FPE_DECOVF_TRAP
        Subscript-range                     SIGFPE       FPE_SUBRNG_TRAP
        Floating overflow fault             SIGFPE       FPE_FLTOVF_FAULT
        Floating divide by zero fault       SIGFPE       FPE_FLTDIV_FAULT
        Floating underflow fault            SIGFPE       FPE_FLTUND_FAULT
     Length access control                  SIGSEGV
     Protection violation                   SIGBUS
     Reserved instruction                   SIGILL       ILL_RESAD_FAULT
     Customer-reserved instr.               SIGEMT
     Reserved operand                       SIGILL       ILL_PRIVIN_FAULT
     Reserved addressing                    SIGILL       ILL_RESOP_FAULT
     Trace pending                          SIGTRAP
     Bpt instruction                        SIGTRAP
     Compatibility-mode                     SIGILL       hardware supplied code
     Chme                                   SIGSEGV
     Chms                                   SIGSEGV
     Chmu                                   SIGSEGV

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026