sigset, sighold, sigrelse, sigignore, sigpause - signal management
void (*sigset(int sig, void (*func)(int)))(int);
int sighold(int sig);
int sigrelse(int sig);
int sigignore(int sig);
int sigpause(int sig);
The system defines a set of signals that can be delivered to a
process. The set of signals is defined in signal(5), along with the
meaning and side effects of each signal. An alternate mechanism for
handling these signals is defined here. The facilities described here
should not be used in conjunction with the other facilities described
under signal(2), sigvector(2), sigblock(2), sigsetmask(2),
sigpause(3C) and sigspace(2).
sigset() allows the calling process to choose one of four ways to
handle the receipt of a specific signal. sig specifies the signal and
func specifies the choice.
sig can be any one of the signals described under signal(5) except
SIGKILL or SIGSTOP.
func is assigned one of four values: SIG_DFL, SIG_IGN, SIG_HOLD, or a
function address. The actions prescribed by SIG_DFL and SIG_IGN are
described under signal(5). The action prescribed by SIG_HOLD and
function address are described below:
SIG_HOLD Hold signal.
The signal sig is held upon receipt. Any pending
signal of this signal type remains held. Only one
signal of each type is held.
Note: the signals SIGKILL, SIGCONT, and SIGSTOP cannot
func must be a pointer to a function, the signal-
catching handler, that is called when signal sig
Hewlett-Packard Company - 1 - HP-UX Release 11i: November 2000
occurs. 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. Upon receipt of signal sig, the
receiving process executes the signal-catching function
pointed to by func as described under signal(5) with
the following differences:
Before calling the signal-catching handler, the system
signal action of sig is set to SIG_HOLD. During a
normal return from the signal-catching handler, the
system signal action is restored to func and any held
signal of this type is released. If a non-local goto
(longjmp(3C)) is taken, sigrelse() must be called to
restore the system signal action to func and release
any held signal of this type.
sighold() holds the signal sig. sigrelse() restores the system signal
action of sig to that specified previously by sigset(). 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().
sigignore() sets the action for signal sig to SIG_IGN (see signal(5)).
sigpause() suspends the calling process until it receives an unblocked
signal. If the signal sig is held, it is released before the process
pauses. sigpause() is useful for testing variables that are changed
when a signal occurs. For example, sighold() should be used to block
the signal first, then test the variables. If they have not changed,
call sigpause() to wait for the signal.
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, a 0 value indicates that the call succeeded.
A -1 return value indicates an error occurred and errno is set to
indicate the reason.
sigset() fails and the system signal action for sig is not changed if
any of the following occur:
[EFAULT] The func argument points to memory that is
not a valid part of the process address
space. Reliable detection of this error is
Hewlett-Packard Company - 2 - HP-UX Release 11i: November 2000
sigset(), sighold(), sigrelse(), sigignore(), and sigpause() fail and
the system signal action for sig is not changed if any of the
[EINVAL] sig is not a valid signal number.
[EINVAL] An attempt is made to ignore, hold, or supply
a handler for a signal that cannot be
ignored, held, or caught; see signal(5).
sigpause returns when the following occurs:
[EINTR] A signal was caught.
These signal facilities should not be used in conjunction with
bsdproc(3C), signal(2), sigvector(2), sigblock(2), sigsetmask(2),
sigpause(3C) and sigspace(2).
kill(1), kill(2), signal(2), pause(2), wait(2), abort(3C), setjmp(3C),
sigset(): SVID2, SVID3
sighold(): SVID2, SVID3
sigignore(): SVID2, SVID3
sigpause(): SVID2, SVID3
sigrelse(): SVID2, SVID3
Hewlett-Packard Company - 3 - HP-UX Release 11i: November 2000