The
sigtimedwait()
system call is equivalent to
sigwaitinfo()
except that if none of the signals specified by
set
are pending,
sigtimedwait()
waits for the time interval specified in the
timespec
structure referenced by
timeout.
If the
timespec
structure pointed to by
timeout
is zero-valued and if none of the signals specified by
set
are pending, then
sigtimedwait()
returns immediately with an error.
If
timeout
is the
NULL
pointer,
sigtimedwait()
blocks indefinitely.
CLOCK_MONOTONIC
clock is used to measure the time interval specified by the
timeout
argument.
The
sigwaitinfo()
system call selects the pending signal from the set specified by
set.
Should any of multiple pending signals in the range
SIGRTMIN
to
SIGRTMAX
be selected, it shall be the lowest numbered one.
The
selection order between realtime and non-realtime signals, or
between multiple pending non-realtime signals, is unspecified.
If no signal in
set
is pending at the time of the call, the calling thread
is suspended until one or more signals in
set
become pending or until it is interrupted by an unblocked, caught signal.
The
sigwaitinfo()
system call is equivalent to the
sigwait()
system call if the
info
argument is
NULL.
If the
info
argument is
non- NULL,
the
sigwaitinfo()
function is equivalent to
sigwait(),
except that the selected signal number shall be stored in the
si_signo
member, and the cause of the signal shall be stored in the
si_code
member.
Besides this, the
sigwaitinfo()
and
sigtimedwait()
system calls may return
EINTR
if interrupted by signal, which is not allowed for the
sigwait()
function.
If any value is queued to the selected signal, the first such queued
value is dequeued and, if the info argument is
non- NULL,
the value is stored in the
si_value
member of
info.
The system resource used to queue the signal
is released and returned to the system for other use.
If no value is queued,
the content of the
si_value
member is zero-valued.
If no further signals are
queued for the selected signal, the pending indication for that signal
is reset.