summaryrefslogtreecommitdiffstats
path: root/man2/sigaction.2
diff options
context:
space:
mode:
Diffstat (limited to 'man2/sigaction.2')
-rw-r--r--man2/sigaction.2466
1 files changed, 466 insertions, 0 deletions
diff --git a/man2/sigaction.2 b/man2/sigaction.2
new file mode 100644
index 000000000..eaa4f67b8
--- /dev/null
+++ b/man2/sigaction.2
@@ -0,0 +1,466 @@
+'\" t
+.\" Copyright (c) 1994,1995 Mike Battersby <mib@deakin.edu.au>
+.\" based on work by faith@cs.unc.edu
+.\"
+.\" 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. The author(s) may not
+.\" have taken the same level of care in the production of this manual,
+.\" which is licensed free of charge, as they might when working
+.\" professionally.
+.\"
+.\" Formatted or processed versions of this manual, if unaccompanied by
+.\" the source, must acknowledge the copyright and authors of this work.
+.\"
+.\" Modified, aeb, 960424
+.\" Modified Fri Jan 31 17:31:20 1997 by Eric S. Raymond <esr@thyrsus.com>
+.\" Modified Thu Nov 26 02:12:45 1998 by aeb - add SIGCHLD stuff.
+.\" Modified Sat May 8 17:40:19 1999 by Matthew Wilcox - add POSIX.1b signals
+.\" Modified Sat Dec 29 01:44:52 2001 by Evan Jones <ejones@uwaterloo.ca> - SA_ONSTACK
+.\"
+.TH SIGACTION 2 2001-12-29 "Linux 2.4" "Linux Programmer's Manual"
+.SH NAME
+sigaction, sigprocmask, sigpending, sigsuspend \- POSIX signal handling functions
+.SH SYNOPSIS
+.B #include <signal.h>
+.sp 2
+.BI "int sigaction(int " signum ", const struct sigaction *" act ,
+.BI "struct sigaction *" oldact );
+.sp
+.BI "int sigprocmask(int " how ", const sigset_t *" set ,
+.BI "sigset_t *" oldset );
+.sp
+.BI "int sigpending(sigset_t *" set );
+.sp
+.BI "int sigsuspend(const sigset_t *" mask );
+.SH DESCRIPTION
+The
+.B sigaction
+system call is used to change the action taken by a process on
+receipt of a specific signal.
+.PP
+.I signum
+specifies the signal and can be any valid signal except
+.B SIGKILL
+and
+.BR SIGSTOP .
+.PP
+If
+.I act
+is non\-null, the new action for signal
+.I signum
+is installed from
+.IR act .
+If
+.I oldact
+is non\-null, the previous action is saved in
+.IR oldact .
+.PP
+The
+.B sigaction
+structure is defined as something like
+.sp
+.RS
+.nf
+struct sigaction {
+ void (*sa_handler)(int);
+ void (*sa_sigaction)(int, siginfo_t *, void *);
+ sigset_t sa_mask;
+ int sa_flags;
+ void (*sa_restorer)(void);
+}
+.fi
+.RE
+.PP
+On some architectures a union is involved - do not assign to both
+.I sa_handler
+and
+.IR sa_sigaction .
+.PP
+The
+.I sa_restorer
+element is obsolete and should not be used.
+POSIX does not specify a
+.I sa_restorer
+element.
+.PP
+.I sa_handler
+specifies the action to be associated with
+.I signum
+and may be
+.B SIG_DFL
+for the default action,
+.B SIG_IGN
+to ignore this signal, or a pointer to a signal handling function.
+This function receives the signal number as its only argument.
+.PP
+.I sa_sigaction
+also specifies the action to be associated with
+.IR signum .
+This function receives the signal number as its first argument, a
+pointer to a
+.I siginfo_t
+as its second argument and a pointer to a
+.I ucontext_t
+(cast to void *) as its third argument.
+.PP
+.I sa_mask
+gives a mask of signals which should be blocked during execution of
+the signal handler. In addition, the signal which triggered the handler
+will be blocked, unless the
+.B SA_NODEFER
+or
+.B SA_NOMASK
+flags are used.
+.PP
+.I sa_flags
+specifies a set of flags which modify the behaviour of the signal handling
+process. It is formed by the bitwise OR of zero or more of the following:
+.RS
+.TP
+.B SA_NOCLDSTOP
+If
+.I signum
+is
+.BR SIGCHLD ", "
+do not receive notification when child processes stop (i.e., when child
+processes receive one of
+.BR SIGSTOP ", " SIGTSTP ", " SIGTTIN
+or
+.BR SIGTTOU ")."
+.TP
+.BR SA_ONESHOT " or " SA_RESETHAND
+Restore the signal action to the default state once the signal handler
+has been called.
+.TP
+.BR SA_ONSTACK
+Call the signal handler on an alternate signal stack provided by
+.BR sigaltstack (2).
+If an alternate stack is not available, the default stack will be used.
+.TP
+.B SA_RESTART
+Provide behaviour compatible with BSD signal semantics by making certain
+system calls restartable across signals.
+.TP
+.BR SA_NOMASK " or " SA_NODEFER
+Do not prevent the signal from being received from within its own signal
+handler.
+.TP
+.B SA_SIGINFO
+The signal handler takes 3 arguments, not one. In this case,
+.I sa_sigaction
+should be set instead of
+.IR sa_handler .
+(The sa_sigaction field was added in Linux 2.1.86.)
+.RE
+.PP
+The
+.I siginfo_t
+parameter to
+.I sa_sigaction
+is a struct with the following elements
+.sp
+.RS
+.nf
+.ta 4 13 24
+siginfo_t {
+ int si_signo; /* Signal number */
+ int si_errno; /* An errno value */
+ int si_code; /* Signal code */
+ pid_t si_pid; /* Sending process ID */
+ uid_t si_uid; /* Real user ID of sending process */
+ int si_status; /* Exit value or signal */
+ clock_t si_utime; /* User time consumed */
+ clock_t si_stime; /* System time consumed */
+ sigval_t si_value; /* Signal value */
+ int si_int; /* POSIX.1b signal */
+ void * si_ptr; /* POSIX.1b signal */
+ void * si_addr; /* Memory location which caused fault */
+ int si_band; /* Band event */
+ int si_fd; /* File descriptor */
+}
+.fi
+.RE
+
+.IR si_signo ", " si_errno " and " si_code
+are defined for all signals.
+The rest of the struct may be a union, so that one should only
+read the fields that are meaningful for the given signal.
+.BR kill (2),
+POSIX.1b signals and SIGCHLD fill in
+.IR si_pid " and " si_uid .
+.BR
+SIGCHLD also fills in
+.IR si_status ", " si_utime " and " si_stime .
+.IR si_int " and " si_ptr
+are specified by the sender of the POSIX.1b signal.
+.\" See
+.\" .BR sigqueue (2)
+.\" for more details.
+SIGILL, SIGFPE, SIGSEGV and SIGBUS fill in
+.I si_addr
+with the address of the fault.
+SIGPOLL fills in
+.IR si_band " and " si_fd .
+
+.I si_code
+indicates why this signal was sent. It is a value, not a bitmask. The
+values which are possible for any signal are listed in this table:
+.TS
+tab(:) allbox;
+c s
+l l.
+\fIsi_code\fR
+Value:Signal origin
+SI_USER:kill, sigsend or raise
+SI_KERNEL:The kernel
+SI_QUEUE:sigqueue
+SI_TIMER:timer expired
+SI_MESGQ:mesq state changed
+SI_ASYNCIO:AIO completed
+SI_SIGIO:queued SIGIO
+.TE
+
+.TS
+tab(:) allbox;
+c s
+l l.
+SIGILL
+ILL_ILLOPC:illegal opcode
+ILL_ILLOPN:illegal operand
+ILL_ILLADR:illegal addressing mode
+ILL_ILLTRP:illegal trap
+ILL_PRVOPC:privileged opcode
+ILL_PRVREG:privileged register
+ILL_COPROC:coprocessor error
+ILL_BADSTK:internal stack error
+.TE
+
+.TS
+tab(:) allbox;
+c s
+l l.
+SIGFPE
+FPE_INTDIV:integer divide by zero
+FPE_INTOVF:integer overflow
+FPE_FLTDIV:floating point divide by zero
+FPE_FLTOVF:floating point overflow
+FPE_FLTUND:floating point underflow
+FPE_FLTRES:floating point inexact result
+FPE_FLTINV:floating point invalid operation
+FPE_FLTSUB:subscript out of range
+.TE
+
+.TS
+tab(:) allbox;
+c s
+l l.
+SIGSEGV
+SEGV_MAPERR:address not mapped to object
+SEGV_ACCERR:invalid permissions for mapped object
+.TE
+
+.TS
+tab(:) allbox;
+c s
+l l.
+SIGBUS
+BUS_ADRALN:invalid address alignment
+BUS_ADRERR:non-existent physical address
+BUS_OBJERR:object specific hardware error
+.TE
+
+.TS
+tab(:) allbox;
+c s
+l l.
+SIGTRAP
+TRAP_BRKPT:process breakpoint
+TRAP_TRACE:process trace trap
+.TE
+
+.TS
+tab(:) allbox;
+c s
+l l.
+SIGCHLD
+CLD_EXITED:child has exited
+CLD_KILLED:child was killed
+CLD_DUMPED:child terminated abnormally
+CLD_TRAPPED:traced child has trapped
+CLD_STOPPED:child has stopped
+CLD_CONTINUED:stopped child has continued
+.TE
+
+.TS
+tab(:) allbox;
+c s
+l l.
+SIGPOLL
+POLL_IN:data input available
+POLL_OUT:output buffers available
+POLL_MSG:input message available
+POLL_ERR:i/o error
+POLL_PRI:high priority input available
+POLL_HUP:device disconnected
+.TE
+
+.PP
+The
+.B sigprocmask
+call is used to change the list of currently blocked signals. The
+behaviour of the call is dependent on the value of
+.IR how ,
+as follows.
+.RS
+.TP
+.B SIG_BLOCK
+The set of blocked signals is the union of the current set and the
+.I set
+argument.
+.TP
+.B SIG_UNBLOCK
+The signals in
+.I set
+are removed from the current set of blocked signals. It is legal to
+attempt to unblock a signal which is not blocked.
+.TP
+.B SIG_SETMASK
+The set of blocked signals is set to the argument
+.IR set .
+.RE
+.PP
+If
+.I oldset
+is non\-null, the previous value of the signal mask is stored in
+.IR oldset .
+.PP
+The
+.B sigpending
+call allows the examination of pending signals (ones which have been
+raised while blocked). The signal mask of pending signals is stored
+in
+.IR set .
+.PP
+The
+.B sigsuspend
+call temporarily replaces the signal mask for the process with that
+given by
+.I mask
+and then suspends the process until a signal is received.
+
+.SH "RETURN VALUE"
+The functions
+.BR sigaction ,
+.BR sigprocmask ,
+and
+.B sigpending
+return 0 on success and \-1 on error.
+The function
+.B sigsuspend
+always returns \-1, normally with the error
+.BR EINTR .
+
+.SH ERRORS
+.TP
+.B EFAULT
+.IR act ", " oldact ", " set ", " oldset
+or
+.I mask
+point to memory which is not a valid part of the process address space.
+.TP
+.B EINTR
+System call was interrupted.
+.TP
+.B EINVAL
+An invalid signal was specified. This will also be generated if an attempt
+is made to change the action for
+.BR SIGKILL " or " SIGSTOP ", "
+which cannot be caught.
+.SH NOTES
+It is not possible to block
+.BR SIGKILL " or " SIGSTOP
+with the sigprocmask call. Attempts to do so will be silently ignored.
+.PP
+According to POSIX, the behaviour of a process is undefined after it
+ignores a SIGFPE, SIGILL, or SIGSEGV signal that was not generated
+by the \fIkill()\fP or the \fIraise()\fP functions.
+Integer division by zero has undefined result.
+On some architectures it will generate a SIGFPE signal.
+(Also dividing the most negative integer by \-1 may generate SIGFPE.)
+Ignoring this signal might lead to an endless loop.
+.PP
+POSIX (B.3.3.1.3) disallows setting the action for SIGCHLD to SIG_IGN.
+The BSD and SYSV behaviours differ, causing BSD software
+that sets the action for SIGCHLD to SIG_IGN to fail on Linux.
+.PP
+The POSIX spec only defines
+.BR SA_NOCLDSTOP .
+Use of other
+.I sa_flags
+is non\-portable.
+.PP
+The
+.B SA_RESETHAND
+flag is compatible with the SVr4 flag of the same name.
+.PP
+The
+.B SA_NODEFER
+flag is compatible with the SVr4 flag of the same name under kernels
+1.3.9 and newer. On older kernels the Linux implementation
+allowed the receipt of any signal, not just the one we are installing
+(effectively overriding any
+.I sa_mask
+settings).
+.PP
+The
+.BR SA_RESETHAND " and " SA_NODEFER
+names for SVr4 compatibility are present only in library versions 3.0.9
+and greater.
+.PP
+The
+.B SA_SIGINFO
+flag is specified by POSIX.1b. Support for it was added in Linux 2.2.
+.PP
+.B sigaction
+can be called with a null second argument to query the current signal
+handler. It can also be used to check whether a given signal is valid for
+the current machine by calling it with null second and third arguments.
+.PP
+See
+.BR sigsetops (3)
+for details on manipulating signal sets.
+.SH "CONFORMING TO"
+POSIX, SVr4. SVr4 does not document the EINTR condition.
+
+.SH UNDOCUMENTED
+Before the introduction of
+.B SA_SIGINFO
+it was also possible to get some additional information,
+namely by using a sa_handler with second argument of type
+.IR "struct sigcontext".
+See the relevant kernel sources for details.
+This use is obsolete now.
+
+.SH "SEE ALSO"
+.BR kill (1),
+.BR kill (2),
+.BR killpg (2),
+.BR pause (2),
+.BR sigaltstack (2),
+.BR signal (2),
+.BR sigvec (2),
+.BR raise (3),
+.BR siginterrupt (3),
+.BR sigsetops (3),
+.BR signal (7)