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) ; |
Note | |||
---|---|---|---|
|
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 signal.
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 performed: 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 number
(i.e., a value greater than zero). On failure both calls
return −1, with errno
set
to indicate the error.
No signal in set
was delivered within
the timeout
period specified to sigtimedwait
().
The wait was interrupted by a signal handler. (This
handler was for a signal other than one of those in
set
.)
timeout
was
invalid.
In normal usage, the calling program blocks the signals in
set
via a prior call
to sigprocmask(2) (so that the
default disposition for these signals does not occur if they
are delivered between successive calls to sigwaitinfo
() or sigtimedwait
()) and does not establish
handlers for these signals. In a multithreaded program, the
signal should be blocked in all threads to prevent the signal
being delivered to a thread other than the one calling
sigwaitinfo
() or sigtimedwait
()).
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.
On Linux, sigwaitinfo
() is a
library function implemented on top of sigtimedwait
().
kill(2), sigaction(2), signal(2), signalfd(2), sigpending(2), sigprocmask(2), sigqueue(2), sigsetops(3), signal(7)
This page is part of release 2.79 of the Linux man-pages
project. A
description of the project, and information about reporting
bugs, can be found at
http://www.kernel.org/doc/man-pages/.
Copyright (c) 2002 Michael Kerrisk <mtk.manpagesgmail.com> Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Since the Linux kernel and libraries are constantly changing, this manual page may be incorrect or out-of-date. The author(s) assume no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. Formatted or processed versions of this manual, if unaccompanied by the source, must acknowledge the copyright and authors of this work. |