sigpause - atomically release blocked signals and wait for interrupt
int sigpause(int mask);
mask = sigmask(int signum);
To use any of the BSD signal routines (kill(3B), killpg(3B),
sigblock(3B), signal(3B), sigpause(3B), sigsetmask(3B), sigstack(2B),
sigvec(3B)) you must either
1) #define _BSD_SIGNALS or _BSD_COMPAT before including <signal.h>, or
2) specify one of them in the compile command or makefile:
cc -D_BSD_SIGNALS -o prog prog.c
sigpause assigns mask to the set of masked signals and then waits for a
signal to arrive; upon return the original set of masked signals is
restored after executing the handler(s) (if any) installed for the
awakening signal(s). mask is usually 0 to indicate that no signals are
now to be blocked. The macro sigmask is provided to construct the mask
for a given signal number. Sigpause always terminates by being
interrupted, returning -1 with the global integer errno set to EINTR.
In normal usage, a signal is blocked using sigblock(3B), to begin a
critical section, variables modified on the occurrence of the signal are
examined to determine that there is no work to be done, and the process
pauses awaiting work by using sigpause with the mask returned by
sigblock(3B), sigvec(3B), signal(5).
Because 4.3BSD and System V both have sigpause system calls, programs
using 4.3BSD's version are actually executing BSDsigpause. This is
transparent to the programmer except when attempting to set breakpoints
in dbx; the breakpoint must be set at BSDsigpause.
The 4.3BSD and System V signal facilities have different semantics.
Using both facilities in the same program is strongly discouraged and
will result in unpredictable behavior.
PPPPaaaaggggeeee 1111 [ Back ]