Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ signal(3C) — bsd — Apollo Domain/OS SR10.4

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>

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

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:

     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
     SIGABRT   6    used by abort, replace SIGIOT in the  future
     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,
     with sig as its argument.

     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 return 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 value of func.  A failed call
     returns SIG_ERR and sets errno as indicated under "Errors." SIG_ERR is
     defined in <signal.h>.

NOTES
     The <signal.h> include file defines an integral atomic data type
     sig_atomic_t.  A signal handler wishing to use only ANSI C facilities
     should not refer to any object with static storage duration other than by
     assigning a value to a static storage duration variable of type volatile
     sig_atomic_t.  Results are undefined if a signal handler calls any
     library function.

     Signal handling functions previously returned type int (*func)() but now
     returns type void (*func)().  The old returned type can be obtained by
     compiling with the -A nansi option to cc(1), and defining the macro
     _CLASSIC_TYPES.

     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 <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