sigpending linux
The sigpending function
returns the set of signals that are blocked from delivery and currently pending
for the calling process. The set of signals is returned through the set argument.
#include
<signal.h>
int
sigpending(sigset_t *set);
Returns: 0 if OK,
1 on error
Example
Example shows
many of the signal features that we've been describing.
The process
blocks SIGQUIT, saving its current signal mask (to reset later), and then goes
to sleep for 5 seconds. Any occurrence of the quit signal during this period is
blocked and won't be delivered until the signal is unblocked. At the end of the
5-second sleep, we check whether the signal is pending and unblock the signal.
Note that we
saved the old mask when we blocked the signal. To unblock the signal, we did a SIG_SETMASK
of the old mask. Alternatively, we could SIG_UNBLOCK only the signal that we
had blocked. Be aware, however, if we write a function that can be called by
others and if we need to block a signal in our function, we can't use SIG_UNBLOCK
to unblock the signal. In this case, we have to use SIG_SETMASK and reset the
signal mask to its prior value, because it's possible that the caller had specifically
blocked this signal before calling our function.
If we generate
the quit signal during this sleep period, the signal is now pending and
unblocked, so it is delivered before sigprocmask returns. We'll see this occur
because the printf in the signal handler is output before the printf that
follows the call to sigprocmask.
The process then
goes to sleep for another 5 seconds. If we generate the quit signal during this
sleep period, the signal should terminate the process, since we reset the
handling of the signal to its default when we caught it. In the following
output, the terminal prints ^\ when we input Control-backslash, the terminal
quit character:
The process then
goes to sleep for another 5 seconds. If we generate the quit signal during this
sleep period, the signal should terminate the process, since we reset the
handling of the signal to its default when we caught it. In the following
output, the terminal prints ^\ when we input Control-backslash, the terminal
quit character.
No comments:
Post a Comment