Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigsetv(S) — OpenDesktop Software Development System 3.0.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

kill(S)

pause(S)

signal(S)

setjmp(S)

wait(S)


 sigsetv(S)                     6 January 1993                     sigsetv(S)


 Name

    sigset, sighold, sigrelse, sigignore, sigpause - signal management
    routines

 Syntax


    cc  . . .  -lc


    #include  <signal.h>

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

    int sighold (sig)
    int sig;

    int sigrelse (sig)
    int sig;

    int sigignore (sig)
    int sig;

    int sigpause (sig)
    int sig;


 Description

    These functions provide signal management for application processes.  The
    sigset system call specifies the system signal action to be taken upon
    receipt of signal sig.  This action is either calling a process signal-
    catching handler func or performing a system-defined action.

    sig can be assigned any one of the following values except SIGKILL and
    SIGSTOP.  Machine- or implementation-dependent signals are not included
    (see Notes below).  Each value of sig is a macro, defined in <signal.h>,
    that expands to an integer constant expression.


    _________________________________________________________________________
    Signal   ValueDescription                                XPG 3POSIX ANSI
    _________________________________________________________________________
    SIGHUP   01   hangup                                       +    +
    SIGINT   02   interrupt                                    +    +     +
    SIGQUIT  03[1]quit                                         +    +
    SIGILL   04[1]illegal instruction (not reset when caught)  +    +     +
    SIGTRAP  05[1]trace trap (not reset when caught)
    SIGIOT   06[1]IOT instruction
    SIGABRT  06[1]used by abort, replaces SIGIOT               +    +     +
    SIGEMT   07[1]EMT instruction
    SIGFPE   08[1]floating point exception                     +    +     +
    SIGKILL  09   kill (cannot be caught or ignored)           +    +
    SIGBUS   10[1]bus error
    SIGSEGV  11[1]segmentation violation                       +    +     +
    SIGSYS   12[1]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                  +    +     +
    SIGUSR1  16   user-defined signal 1                        +    +
    SIGUSR2  17   user-defined signal 2                        +    +
    SIGCLD   18[3]death of a child
    SIGCHLD  18[3]synonym for SIGCLD
    SIGPWR   19[3]power fail
    SIGWINCH 20   window change
    SIGPOLL  22[4]selectable event pending
    SIGSTOP  23[2]sendable stop signal not from tty            +    +
    SIGTSTP  24[2]stop signal from tty                         +    +
    SIGCONT  25[2]continue a stopped process                   +    +
    SIGTTIN  26[2]background tty read attempt                  +    +
    SIGTTOU  27[2]background tty write attempt                 +    +
    SIGVTALRM28   virtual timer alarm
    SIGPROF  29   profile alarm

    The following values for the system-defined actions of func are also
    defined in <signal.h>.  Each is a macro that expands to a constant
    expression of type pointer to function returning void and has a unique
    value that matches no declarable function.


    SIGDFL (default system action)
              Upon receipt of the signal sig, the receiving process is to be
              terminated with all of the consequences outlined in exit(S).
              Those signals with a [1] or a [2] are exceptions to this rule.
              Their default behavior is described in the corresponding Notes
              section below.

    SIGIGN (ignore signal)
              Any pending signal sig is discarded and the system signal
              action is set to ignore future occurrences of this signal type.

    SIGHOLD (hold signal)
              The signal sig is to be held upon receipt.  Any pending signal
              of this type remains held.  Only one signal of each type is
              held.

    Otherwise, func must be a pointer to a function, the signal-catching
    handler, that is to be called when signal sig occurs.  In this case, sig-
    set specifies that the process calls this function upon receipt of signal
    sig.  Any pending signal of this type is released.  This handler address
    is retained across calls to the other signal management functions listed
    here.

    When a signal occurs, the signal number sig is passed as the only argu-
    ment to the signal-catching handler.  Before calling the signal-catching
    handler, the system signal action is set to SIGHOLD.  During normal
    return from the signal-catching handler, the system signal action is
    restored to func and any held signal of this type released.  If a non-
    local goto (longjmp) is taken, then the signal remains held, and sigrelse
    must be called to restore the system signal action and release any held
    signal of this type.

    If a signal-catching function is invoked, how it effects the interrupted
    function is described by each individual function. See the X/Open Porta-
    bility Guide, Issue 3, 1989 sigaction(S) section ``Signal Effects on
    Other Functions'', for further information.

    sighold and sigrelse are used to establish critical regions of code.
    sighold is analogous to raising the priority level and deferring or hold-
    ing a signal until the priority is lowered by sigrelse.  sigrelse
    restores the system signal action to that specified previously by sigset.

    sigignore sets the action for signal sig to SIGIGN (see above).

    sigpause suspends the calling process until it receives a signal, the
    same as pause(S).  However, if the signal sig had been received and held,
    it is released and the system signal action taken.  This system call is
    useful for testing variables that are changed on the occurrence of a sig-
    nal.  The correct usage is to use sighold to block the signal first, then
    test the variables.  If they have not changed, then call sigpause to wait
    for the signal.  sigset fails if one or more of the following is true:


    [EINVAL]  sig is an illegal signal number (including SIGKILL) or the
              default handling of sig cannot be changed.

    [EINTR]   A signal was caught during the system call sigpause.


 Diagnostics

    Upon successful completion, sigset returns the previous value of the sys-
    tem signal action for the specified signal sig.  Otherwise, a value of
    SIGERR is returned and errno is set to indicate the error.  SIGERR is
    defined in <signal.h>.

    For the other functions, upon successful completion, a value of 0 is
    returned.  Otherwise, a value of -1 is returned and errno is set to indi-
    cate the error.

 Notes


    [1] If SIGDFL is assigned for these signals, in addition to the process
        being terminated, a ``core image'' is constructed in the current
        working directory of the process, if the following conditions are
        met:

       The effective user ID and the real user ID of the receiving process
       are equal.

       An ordinary file named core exists and is writable or can be created.
       If the file must be created, it has the following properties:

       +  a mode of 0666 modified by the file creation mask (see umask(S)).

       +  a file owner ID that is the same as the effective user ID of the
          receiving process.

       +  a file group ID that is the same as the effective group ID of the
          receiving process.

    [2] For the signals SIGSTOP, SIGTSTP, SIGTTIN, and SIGTTOU the default
        action is to stop the process rather than to terminate the process.
        The distinction is that a stopped process can be started again with a
        SIGCONT whereas a terminated process cannot be restarted under any
        circumstance.

        For the SIGCONT signal, the default action is to continue the process
        if it is stopped, otherwise it is ignored.

    [3] For the signals SIGCLD and SIGPWR, the signal-handling function is,
        again, assigned one of three values:  SIGDFL, SIGIGN, or a function
        address.  The actions prescribed by these values are:

        SIGDFL (ignore signal)
                The signal is to be ignored.

        SIGIGN (ignore signal)
                The signal is to be ignored.  Also, if sig is SIGCLD, the
                calling process's child processes does not create zombie pro-
                cesses when they terminate (see exit(S)).

        function address (catch signal)
                If the signal is SIGPWR, the action to be taken is the same
                as that described above for func equal to function address.
                The same is true if the signal is SIGCLD with one exception:
                while the process is executing the signal-catching function,
                any received SIGCLD signals are ignored.  (This is the
                default action.)

        In addition, SIGCLD affects the wait, waitpid, and exit system calls
        as follows:

        wait    If the func for SIGCLD is set to SIGIGN and a wait is exe-
                cuted, the wait blocks until all of the calling process's
                child processes terminate; it then returns a value of -1 with
                errno set to ECHILD

        waitpid If the func for SIGCLD is set to SIGIGN and a waitpid is
                executed, the waitpid blocks until all of the calling pro-
                cess's child processes terminate; it then returns a value of
                -1 with errno set to ECHILD. However, if the WNOHANG option
                is specified, waitpid does not block.

        exit    If in the exiting process's parent process the func value of
                SIGCLD is set to SIGIGN, the exiting process does not create
                a zombie process.

        When processing a pipeline, the shell makes the last process in the
        pipeline the parent of the preceding processes.  A process that may
        be piped into in this manner (and thus become the parent of other
        processes) should take care not to set SIGCLD to be caught.


    [4] SIGPOLL is issued when a file descriptor corresponding to a STREAMS
        (see Intro(S)) file has a ``selectable'' event pending.  A process
        must specifically request that this signal be sent using the ISETSIG
        ioctl call.  Otherwise, the process never receives SIGPOLL. SIGPOLL
        is defined to have a value of 20 if used in cross-compiling for
        XENIX.

    For portability, applications should use only the symbolic names of sig-
    nals rather than their values and use only the set of signals defined
    here.  The action for the signal SIGKILL cannot be changed from the
    default system action.

    Other implementations of UNIX System V may have other implementation-
    defined signals.  Also, additional implementation-defined arguments may
    be passed to the signal-catching handler for hardware-generated signals.
    For certain hardware-generated signals, it may not be possible to resume
    execution at the point of interruption.

    The signal type SIGSEGV is reserved for the condition that occurs on an
    invalid access to a data object.

    The other signal management functions, signal(S) and pause(S), should not
    be used in conjunction with these routines for a particular signal type.

 See also

    kill(S), pause(S), signal(S), setjmp(S), wait(S)

 Standards conformance

    sigsetv is conformant with:
    Intel386 Binary Compatibility Specification, Edition 2 (iBCSe2).


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