DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

sigsetv(S)


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

sigset- specifies signal action to be taken

sighold- holds a signal until released or discarded

sigrelse- release a held signal

sigignore- sets the action for signal to SIG_IGN

sigpause- suspends the calling process until it receives a signal

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 Value Description XPG 3 POSIX ANSI
SIGHUP 01   hangup BULLET BULLET  
SIGINT 02   interrupt BULLET BULLET BULLET
SIGQUIT 03 [1] quit BULLET BULLET  
SIGILL 04 [1] illegal instruction (not reset when caught) BULLET BULLET BULLET
SIGTRAP 05 [1] trace trap (not reset when caught)      
SIGIOT 06 [1] IOT instruction      
SIGABRT 06 [1] used by abort, replaces SIGIOT BULLET BULLET BULLET
SIGEMT 07 [1] EMT instruction      
SIGFPE 08 [1] floating point exception BULLET BULLET BULLET
SIGKILL 09   kill (cannot be caught or ignored) BULLET BULLET  
SIGBUS 10 [1] bus error      
SIGSEGV 11 [1] segmentation violation BULLET BULLET BULLET
SIGSYS 12 [1] bad argument to system call      
SIGPIPE 13   write on a pipe with no one to read it BULLET BULLET  
SIGALRM 14   alarm clock BULLET BULLET  
SIGTERM 15   software termination signal BULLET BULLET BULLET
SIGUSR1 16   user-defined signal 1 BULLET BULLET  
SIGUSR2 17   user-defined signal 2 BULLET BULLET  
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 BULLET BULLET  
SIGTSTP 24 [2] stop signal from tty BULLET BULLET  
SIGCONT 25 [2] continue a stopped process BULLET BULLET  
SIGTTIN 26 [2] background tty read attempt BULLET BULLET  
SIGTTOU 27 [2] background tty write attempt BULLET BULLET  
SIGVTALRM 28   virtual timer alarm      
SIGPROF 29   profile alarm      

 +----------+-------+---------------------------------------------+-------+-------+-------+
 |Signal    |Value  | Description                                 | XPG 3 | POSIX | 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                |       |       |       |
 +----------+--+----+---------------------------------------------+-------+-------+-------+
 |SIGVTALRM |28|    | 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.


SIG_DFL (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.

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

SIG_HOLD (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, sigset 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 argument to the signal-catching handler. Before calling the signal-catching handler, the system signal action is set to SIG_HOLD. 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 Portability 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 holding 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 SIG_IGN (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 signal. 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 system signal action for the specified signal sig. Otherwise, a value of SIG_ERR is returned and errno is set to indicate the error. SIG_ERR 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 indicate the error.

Notes

  1. If SIG_DFL 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:

  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: SIG_DFL, SIG_IGN, or a function address. The actions prescribed by these values are:

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

    SIG_IGN (ignore signal)
    The signal is to be ignored. Also, if sig is SIGCLD, the calling process's child processes does not create zombie processes 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 SIG_IGN and a wait is executed, 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 SIG_IGN and a waitpid is executed, the waitpid blocks until all of the calling process'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 SIG_IGN, 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 I_SETSIG 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 signals 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) .


© 2003 Caldera International, Inc. All rights reserved.
SCO OpenServer Release 5.0.7 -- 11 February 2003