(libc.info.gz) Checking for Pending Signals

Info Catalog (libc.info.gz) Blocking for Handler (libc.info.gz) Blocking Signals (libc.info.gz) Remembering a Signal
 
 24.7.6 Checking for Pending Signals
 -----------------------------------
 
 You can find out which signals are pending at any time by calling
 'sigpending'.  This function is declared in 'signal.h'.
 
  -- Function: int sigpending (sigset_t *SET)
      Preliminary: | MT-Safe | AS-Unsafe lock/hurd | AC-Unsafe lock/hurd
      |  POSIX Safety Concepts.
 
      The 'sigpending' function stores information about pending signals
      in SET.  If there is a pending signal that is blocked from
      delivery, then that signal is a member of the returned set.  (You
      can test whether a particular signal is a member of this set using
      'sigismember'; see  Signal Sets.)
 
      The return value is '0' if successful, and '-1' on failure.
 
    Testing whether a signal is pending is not often useful.  Testing
 when that signal is not blocked is almost certainly bad design.
 
    Here is an example.
 
      #include <signal.h>
      #include <stddef.h>
 
      sigset_t base_mask, waiting_mask;
 
      sigemptyset (&base_mask);
      sigaddset (&base_mask, SIGINT);
      sigaddset (&base_mask, SIGTSTP);
 
      /* Block user interrupts while doing other processing. */
      sigprocmask (SIG_SETMASK, &base_mask, NULL);
      ...
 
      /* After a while, check to see whether any signals are pending. */
      sigpending (&waiting_mask);
      if (sigismember (&waiting_mask, SIGINT)) {
        /* User has tried to kill the process. */
      }
      else if (sigismember (&waiting_mask, SIGTSTP)) {
        /* User has tried to stop the process. */
      }
 
    Remember that if there is a particular signal pending for your
 process, additional signals of that same type that arrive in the
 meantime might be discarded.  For example, if a 'SIGINT' signal is
 pending when another 'SIGINT' signal arrives, your program will probably
 only see one of them when you unblock this signal.
 
    *Portability Note:* The 'sigpending' function is new in POSIX.1.
 Older systems have no equivalent facility.
 
Info Catalog (libc.info.gz) Blocking for Handler (libc.info.gz) Blocking Signals (libc.info.gz) Remembering a Signal
automatically generated by info2html