SIGWAITINFO(2)             Linux Programmer's Manual            SIGWAITINFO(2)

       sigwaitinfo, sigtimedwait - synchronously wait for queued signals

       #include <signal.h>

       int sigwaitinfo(const sigset_t *set, siginfo_t *info);

       int  sigtimedwait(const  sigset_t  *set,  siginfo_t *info, const struct
       timespec timeout);

       sigwaitinfo() suspends execution of the calling process  until  one  of
       the  signals  in  set  is  delivered.  (If one of the signals in set is
       already pending for the  calling  process,  sigwaitinfo()  will  return
       immediately with information about that signal.)

       sigwaitinfo()  removes  the delivered signal from the calling process's
       list of pending signals and returns the signal number as  its  function
       result.   If the info argument is not NULL, then it returns a structure
       of type siginfo_t (see sigaction(2)) containing information  about  the

       Signals  returned  via  sigwaitinfo() are delivered in the usual order;
       see signal(7) for further details.

       sigtimedwait() operates in exactly the same way as sigwaitinfo() except
       that  it  has  an  additional argument, timeout, which enables an upper
       bound to be placed on the time for  which  the  process  is  suspended.
       This argument is of the following type:

         struct timespec {
             long    tv_sec;         /* seconds */
             long    tv_nsec;        /* nanoseconds */

       If  both  fields  of  this structure are specified as 0, a poll is per-
       formed: sigtimedwait() returns  immediately,  either  with  information
       about  a  signal  that  was pending for the caller, or with an error if
       none of the signals in set was pending.

       On success, both sigwaitinfo() and sigtimedwait() return a signal  num-
       ber  (i.e.,  a  value greater than zero).  On failure both calls return
       -1, with errno set to indicate the error.

       EAGAIN No signal in set was delivered within the timeout period  speci-
              fied to sigtimedwait().

       EINVAL timeout was invalid.

       EINTR  The wait was interrupted by a signal handler.  (This handler was
              for a signal other than one of those in set.)

       In normal usage, the caller blocks the signals in set via a prior  call
       to  sigprocmask()  (so  that  the default disposition for these signals
       does not occur if they are delivered between successive calls  to  sig-
       waitinfo()or  sigtimedwait()) and does not establish handlers for these

       POSIX leaves the meaning of a NULL value for the  timeout  argument  of
       sigtimedwait()  unspecified,  permitting  the possibility that this has
       the same meaning as a call to sigwaitinfo(), and indeed this is what is
       done on Linux.

       POSIX 1003.1-2001

       kill(2),   sigaction(2),   signal(2),   sigpending(2),  sigprocmask(2),
       sigqueue(2), signal(7), sigsetops(3)

Linux 2.4.18                      2002-06-07                    SIGWAITINFO(2)