SIGSET(2) SIGSET(2)
sigset, sighold, sigrelse, sigignore, sigpause - signal management
(System V)
#include <signal.h>
C:
void (*sigset (int sig, void (*disp)()))();
C++:
void (*sigset (int sig, void (*disp)(int)))(int);
#if _XOPEN_SOURCE
void (*sigset (int sig, void (*disp)(int)))(int);
#endif
int sighold (int sig);
int sigrelse (int sig);
int sigignore (int sig);
int sigpause (int sig);
These functions provide signal management for application processes.
sigset specifies the system signal action to be taken upon receipt of
signal sig. disp specifies the signal's disposition, which may be
SIG_DFL, SIG_IGN, or the address of a signal handler. If disp is the
address of a signal handler, the system adds sig to the calling process's
signal mask before executing the signal handler; when the signal handler
returns, the system restores the calling process's signal mask to its
state prior to the delivery of the signal. In addition, if disp is equal
to SIG_HOLD, sig is added to the calling process's signal mask and the
signal's disposition remains unchanged. If disp is not equal to
SIG_HOLD, sig will be removed from the calling process's signal mask
(this behavior is different than sigaction(2)).
sighold adds sig to the calling process's signal mask.
sigrelse removes sig from the calling process's signal mask.
sigignore sets the disposition for sig to SIG_IGN.
sigpause removes sig from the calling process's signal mask and suspends
the calling process until a signal is received. 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.
Page 1
SIGSET(2) SIGSET(2)
For a list of valid signal numbers and a general description of the
signal mechanism, please see signal(5).
These functions will fail if one or more of the following are true:
[EINVAL] sig is an illegal signal number (including SIGKILL and SIGSTOP)
or the default handling of sig cannot be changed.
[EINVAL] The requested action is illegal (e.g. ignoring SIGCONT, which
is ignored by default).
[EINTR] A signal was caught during the system call sigpause.
Upon successful completion, sigset returns SIG_HOLD if the signal had
been blocked or the signal's previous disposition if it had not been
blocked. Otherwise, a value of SIG_ERR is returned and errno is set to
indicate the error. SIG_ERR is defined in <sys/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.
csh(1), blockproc(2), kill(2), pause(2), setrlimit(2), sigaction(2),
signal(2), ulimit(2), wait(2), setjmp(3C), sigvec(3B), signal(5),
siginfo(5).
Signals raised by any instruction in the instruction stream, including
SIGFPE, SIGILL, SIGEMT, SIGBUS, and SIGSEGV, will cause infinite loops if
their handler returns, or the action is set to SIG_IGN. This is because
the exception PC at the time of the signal points to the instruction that
raised the exception or signal, and resuming the process will re-execute
that same instruction.
The POSIX signal routines (sigaction(2), sigpending(2), sigprocmask(2),
sigsuspend(2), sigsetjmp(3)), and the 4.3BSD signal routines (sigvec(3B),
signal(3B), sigblock(3B), sigpause(3B), sigsetmask(3B)) must NEVER be
used with signal(2) or sigset(2).
PPPPaaaaggggeeee 2222 [ Back ]
|