The
sigsuspend()
system call
temporarily changes the blocked signal mask to the set to which
sigmask
points,
and then waits for a signal to arrive;
on return the previous set of masked signals is restored.
The signal mask set
is usually empty to indicate that all
signals are to be unblocked for the duration of the call.
In normal usage, a signal is blocked using
sigprocmask(2)
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
sigsuspend()
with the previous mask returned by
sigprocmask(2).