@c @c COPYRIGHT (c) 1988-1998. @c On-Line Applications Research Corporation (OAR). @c All rights reserved. @c @c $Id$ @c @ifinfo @node Signal Manager, Signal Manager Introduction, pthread_getschedparam, Top @end ifinfo @chapter Signal Manager @ifinfo @menu * Signal Manager Introduction:: * Signal Manager Background:: * Signal Manager Operations:: * Signal Manager Directives:: @end menu @end ifinfo @ifinfo @node Signal Manager Introduction, Signal Manager Background, Signal Manager, Signal Manager @end ifinfo @section Introduction The signal manager ... The directives provided by the signal manager are: @itemize @bullet @item @code{sigaddset} - @item @code{sigdelset} - @item @code{sigfillset} - @item @code{sigismember} - @item @code{sigemptyset} - @item @code{sigaction} - @item @code{pthread_kill} - @item @code{sigprocmask} - @item @code{pthread_sigmask} - @item @code{kill} - @item @code{sigpending} - @item @code{sigsuspend} - @item @code{pause} - @item @code{sigwait} - @item @code{sigwaitinfo} - @item @code{sigtimedwait} - @item @code{sigqueue} - @item @code{alarm} - @end itemize @ifinfo @node Signal Manager Background, Signal Delivery, Signal Manager Introduction, Signal Manager @end ifinfo @section Background @ifinfo @menu * Signal Delivery:: @end menu @end ifinfo @ifinfo @node Signal Delivery, Signal Manager Operations, Signal Manager Background, Signal Manager Background @end ifinfo @subsection Signal Delivery Signals directed at a thread are delivered to the specified thread. Signals directed at a process are delivered to a thread which is selected based on the following algorithm: @enumerate @item If the action for this signal is currently SIG_IGN, then the signal is simply ignored. @item If the currently executing thread has the signal unblocked, then the signal is delivered to it. @item If any threads are currently blocked waiting for this signal (sigwait()), then the signal is delivered to the highest priority thread waiting for this signal. @item If any other threads are willing to accept delivery of the signal, then the signal is delivered to the highest priority thread of this set. In the event, multiple threads of the same priority are willing to accept this signal, then priority is given first to ready threads, then to threads blocked on calls which may be interrupted, and finally to threads blocked on non-interruptible calls. @item In the event the signal still can not be delivered, then it is left pending. The first thread to unblock the signal (sigprocmask() or pthread_sigprocmask()) or to wait for this signal (sigwait()) will be the recipient of the signal. @end enumerate @ifinfo @node Signal Manager Operations, Signal Manager Directives, Signal Delivery, Signal Manager @end ifinfo @section Operations @ifinfo @node Signal Manager Directives, sigaddset, Signal Manager Operations, Signal Manager @end ifinfo @section Directives @ifinfo @menu * sigaddset:: * sigdelset:: * sigfillset:: * sigismember:: * sigemptyset:: * sigaction:: * pthread_kill:: * sigprocmask:: * pthread_sigmask:: * kill:: * sigpending:: * sigsuspend:: * pause:: * sigwait:: * sigwaitinfo:: * sigtimedwait:: * sigqueue:: * alarm:: @end menu @end ifinfo This section details the signal manager's directives. A subsection is dedicated to each of this manager's directives and describes the calling sequence, related constants, usage, and status codes. @page @ifinfo @node sigaddset, sigdelset, Signal Manager Directives, Signal Manager Directives @end ifinfo @subsection sigaddset @subheading CALLING SEQUENCE: @example #include int sigaddset( sigset_t *set, int signo ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigdelset, sigfillset, sigaddset, Signal Manager Directives @end ifinfo @subsection sigdelset @subheading CALLING SEQUENCE: @example #include int sigdelset( sigset_t *set, int signo ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigfillset, sigismember, sigdelset, Signal Manager Directives @end ifinfo @subsection sigfillset @subheading CALLING SEQUENCE: @example #include int sigfillset( sigset_t *set ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigismember, sigemptyset, sigfillset, Signal Manager Directives @end ifinfo @subsection sigismember @subheading CALLING SEQUENCE: @example #include int sigismember( const sigset_t *set, int signo ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigemptyset, sigaction, sigismember, Signal Manager Directives @end ifinfo @subsection sigemptyset @subheading CALLING SEQUENCE: @example #include int sigemptyset( sigset_t *set ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigaction, pthread_kill, sigemptyset, Signal Manager Directives @end ifinfo @subsection sigaction @subheading CALLING SEQUENCE: @example #include int sigaction( int sig, const struct sigaction *act, struct sigaction *oact ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @item ENOTSUP Realtime Signals Extension option not supported. @end table @subheading DESCRIPTION: @subheading NOTES: The signal number cannot be SIGKILL. @page @ifinfo @node pthread_kill, sigprocmask, sigaction, Signal Manager Directives @end ifinfo @subsection pthread_kill @subheading CALLING SEQUENCE: @example #include int pthread_kill( pthread_t thread, int sig ); @end example @subheading STATUS CODES: @table @b @item ESRCH The thread indicated by the parameter thread is invalid. @item EINVAL Invalid argument passed. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigprocmask, pthread_sigmask, pthread_kill, Signal Manager Directives @end ifinfo @subsection sigprocmask @subheading CALLING SEQUENCE: @example #include int sigprocmask( int how, const sigset_t *set, sigset_t *oset ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node pthread_sigmask, kill, sigprocmask, Signal Manager Directives @end ifinfo @subsection pthread_sigmask @subheading CALLING SEQUENCE: @example #include int pthread_sigmask( int how, const sigset_t *set, sigset_t *oset ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node kill, sigpending, pthread_sigmask, Signal Manager Directives @end ifinfo @subsection kill @subheading CALLING SEQUENCE: @example #include #include int kill( pid_t pid, int sig ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @item EPERM Process does not have permission to send the signal to any receiving process. @item ESRCH The process indicated by the parameter pid is invalid. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigpending, sigsuspend, kill, Signal Manager Directives @end ifinfo @subsection sigpending @subheading CALLING SEQUENCE: @example #include int sigpending( const sigset_t *set ); @end example @subheading STATUS CODES: On error, this routine returns -1 and sets errno to one of the following: @table @b @item EFAULT Invalid address for set. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigsuspend, pause, sigpending, Signal Manager Directives @end ifinfo @subsection sigsuspend @subheading CALLING SEQUENCE: @example #include int sigsuspend( const sigset_t *sigmask ); @end example @subheading STATUS CODES: @table @b Returns -1 and sets errno. @item EINTR Signal interrupted this function. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node pause, sigwait, sigsuspend, Signal Manager Directives @end ifinfo @subsection pause @subheading CALLING SEQUENCE: @example #include int pause( void ); @end example @subheading STATUS CODES: @table @b Returns -1 and sets errno. @item EINTR Signal interrupted this function. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigwait, sigwaitinfo, pause, Signal Manager Directives @end ifinfo @subsection sigwait @subheading CALLING SEQUENCE: @example #include int sigwait( const sigset_t *set, int *sig ); @end example @subheading STATUS CODES: @table @b @item EINVAL Invalid argument passed. @item EINTR Signal interrupted this function. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigwaitinfo, sigtimedwait, sigwait, Signal Manager Directives @end ifinfo @subsection sigwaitinfo @subheading CALLING SEQUENCE: @example #include int sigwaitinfo( const sigset_t *set, siginfo_t *info ); @end example @subheading STATUS CODES: @table @b @item EINTR Signal interrupted this function. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node sigtimedwait, sigqueue, sigwaitinfo, Signal Manager Directives @end ifinfo @subsection sigtimedwait @subheading CALLING SEQUENCE: @example #include int sigtimedwait( const sigset_t *set, siginfo_t *info, const struct timespec *timeout ); @end example @subheading STATUS CODES: @table @b @item EAGAIN Timed out while waiting for the specified signal set. @item EINVAL Nanoseconds field of the timeout argument is invalid. @item EINTR Signal interrupted this function. @end table @subheading DESCRIPTION: @subheading NOTES: If timeout is NULL, then the thread will wait forever for the specified signal set. @page @ifinfo @node sigqueue, alarm, sigtimedwait, Signal Manager Directives @end ifinfo @subsection sigqueue @subheading CALLING SEQUENCE: @example #include int sigqueue( pid_t pid, int signo, const union sigval value ); @end example @subheading STATUS CODES: @table @b @item EAGAIN No resources available to queue the signal. The process has already queued SIGQUEUE_MAX signals that are still pending at the receiver or the systemwide resource limit has been exceeded. @item EINVAL The value of the signo argument is an invalid or unsupported signal number. @item EPERM The process does not have the appropriate privilege to send the signal to the receiving process. @item ESRCH The process pid does not exist. @end table @subheading DESCRIPTION: @subheading NOTES: @page @ifinfo @node alarm, Mutex Manager, sigqueue, Signal Manager Directives @end ifinfo @subsection alarm @subheading CALLING SEQUENCE: @example #include unsigned int alarm( unsigned int seconds ); @end example @subheading STATUS CODES: If there was a previous alarm() request with time remaining, then this routine returns the number of seconds until that outstanding alarm would have fired. If no previous alarm() request was outstanding, then zero is returned. @subheading DESCRIPTION: @subheading NOTES: