SIGSET(2) SIGSET(2) NAME sigset, sighold, sigrelse, sigignore, sigpause - signal management (System V) C SYNOPSIS #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); DESCRIPTION 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. 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. DIAGNOSTICS 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. SEE ALSO 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). WARNINGS 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). Page 2