summaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authordavidc <davidc@FreeBSD.org>2002-06-10 03:00:24 +0000
committerdavidc <davidc@FreeBSD.org>2002-06-10 03:00:24 +0000
commitd807f27d99296f88e52377d762431b2cc8e6cf1a (patch)
tree3afc0031e84ad83c8fcabcb2c01d76397bc95f11 /share
parent6818b4c0ebd2fd8b986caecdc6901cf357627202 (diff)
downloadFreeBSD-src-d807f27d99296f88e52377d762431b2cc8e6cf1a.zip
FreeBSD-src-d807f27d99296f88e52377d762431b2cc8e6cf1a.tar.gz
New man page that documents many of the kernel related signal functions.
Requested by: alfred
Diffstat (limited to 'share')
-rw-r--r--share/man/man9/signal.9411
1 files changed, 411 insertions, 0 deletions
diff --git a/share/man/man9/signal.9 b/share/man/man9/signal.9
new file mode 100644
index 0000000..3b05fc0
--- /dev/null
+++ b/share/man/man9/signal.9
@@ -0,0 +1,411 @@
+.\"
+.\" Copyright (C) 2002 Chad David <davidc@FreeBSD.org>. All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice(s), this list of conditions and the following disclaimer as
+.\" the first lines of this file unmodified other than the possible
+.\" addition of one or more copyright notices.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice(s), this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
+.\" EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+.\" DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
+.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+.\" CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+.\" DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd June 9, 2002
+.Dt SIGNAL 9
+.Os
+.Sh NAME
+.Nm signal
+.Nm SIGADDSET ,
+.Nm SIGDELSET ,
+.Nm SETEMPTYSET ,
+.Nm SIGFILLSET ,
+.Nm SIGISMEMBER ,
+.Nm SIGISEMPTY ,
+.Nm SIGNOTEMPTY,
+.Nm SIGSETEQ ,
+.Nm SIGSETNEQ ,
+.Nm SIGSETOR ,
+.Nm SIGSETAND ,
+.Nm SIGSETNAND ,
+.Nm SIGSETCANTMASK ,
+.Nm SIG_STOPSIGMASK ,
+.Nm SIG_CONTSIGMASK ,
+.Nm SIGPENDING ,
+.Nm CURSIG ,
+.Nm execsigs ,
+.Nm issignal ,
+.Nm killproc ,
+.Nm pgsigio ,
+.Nm postsig ,
+.Nm sigexit ,
+.Nm siginit ,
+.Nm signotify ,
+.Nm trapsignal
+.Nd "kernel signal functions"
+.Sh SYNOPSIS
+.In sys/param.h
+.In sys/proc.h
+.In sys/signalvar.h
+.Ft void
+.Fn SIGADDSET "sigset_t set" "int signo"
+.Ft void
+.Fn SIGDELSET "sigset_t set" "int signo"
+.Ft void
+.Fn SIGEMPTYSET "sigset_t set"
+.Ft void
+.Fn SIGFILLSET "sigset_t set"
+.Ft int
+.Fn SIGISMEMBER "sigset_t set" "int signo"
+.Ft int
+.Fn SIGISEMPTY "sigset_t set"
+.Ft int
+.Fn SIGNOTEMPTY "sigset_t set"
+.Ft int
+.Fn SIGSETEQ "sigset_t set1" "sigset_t set2"
+.Ft int
+.Fn SIGSETNEQ "sigset_t set1" "sigset_t set2"
+.Ft void
+.Fn SIGSETOR "sigset_t set1" "sigset_t set2"
+.Ft void
+.Fn SIGSETAND "sigset_t set1" "sigset_t set2"
+.Ft void
+.Fn SIGSETNAND "sigset_t set1" "sigset_t set2"
+.Ft void
+.Fn SIG_CANTMASK "sigset_t set"
+.Ft void
+.Fn SIG_STOPSIGMASK "sigset_t set"
+.Ft void
+.Fn SIG_CONTSIGMASK "sigset_t set"
+.Ft int
+.Fn SIGPENDING "struct proc *p"
+.Ft int
+.Fn CURSIG "struct proc *p"
+.Ft void
+.Fn execsigs "struct proc *p"
+.Ft int
+.Fn issignal "struct proc *p"
+.Ft void
+.Fn killproc "struct proc *p" "char *why"
+.Ft void
+.Fn pgsigio "struct sigio **sigiop" "int sig" "int checkctty"
+.Ft void
+.Fn postsig "int sig"
+.Ft void
+.Fn sigexit "struct thread *td" "int signum"
+.Ft void
+.Fn siginit "struct proc *p"
+.Ft void
+.Fn signotify "struct proc *p"
+.Ft void
+.Fn trapsignal "struct proc *p" "int sig" "u_long code"
+.Sh DESCRIPTION
+The
+.Fn SIGADDSET
+macro adds
+.Fa signo
+to
+.Fa set .
+No effort is made to ensure that
+.Fa signo
+is a valid signal number.
+.Pp
+The
+.Fn SIGDELSET
+macro removes
+.Fa signo
+from
+.Fa set .
+No effort is made to ensure that
+.Fa signo
+is a valid signal number.
+.Pp
+The
+.Fn SIGEMPTYSET
+macro clears all signals in
+.Fa set .
+.Pp
+The
+.Fn SIGFILLSET
+macro sets all signals in
+.Fa set .
+.Pp
+The
+.Fn SIGISMEMBER
+macro determines if
+.Fa signo
+is set in
+.Fa set .
+.Pp
+The
+.Fn SIGISEMPTY
+macro determines if
+.Fa set
+does not have any signals set.
+.Pp
+The
+.Fn SIGNOTEMPTY
+macro determines if
+.Fa set
+has any signals set.
+.Pp
+The
+.Fn SIGSETEQ
+macro determines if two signal sets are equal; that is, the same signals
+are set in both.
+.Pp
+The
+.Fn SIGSETNEQ
+macro determines if two signal sets differ; that is, if any signal set in
+one is not set in the other.
+.Pp
+The
+.Fn SIGSETOR
+macro ors the signals set in
+.Fa set2
+into
+.Fa set1 .
+.Pp
+The
+.Fn SIGSETAND
+macro ands the signals set in
+.Fa set2
+into
+.Fa set1 .
+.Pp
+The
+.Fn SIGSETNAND
+macro nands the signals set in
+.Fa set2
+into
+.Fa set1 .
+.Pp
+The
+.Fn SIG_CANTMASK
+macro clears the
+.Dv SIGKILL
+and
+.Dv SIGSTOP
+signals from
+.Fa set .
+These two signals cannot be blocked or caught and
+.Fn SIG_CANTMASK
+is used in code where signals are manipulated to ensure this policy
+is enforced.
+.Pp
+The
+.Fn SIG_STOPSIGMASK
+macro clears the
+.Dv SIGSTOP ,
+.Dv SIGTSTP ,
+.Dv SIGTTIN ,
+and
+.Dv SIGTTOU
+signals from
+.Fa set .
+.Fn SIG_STOPSIGMASK
+is used to clear stop signals when a process is waiting for a child to
+exit or exec, and when a process is continuing after having been
+suspended.
+.Pp
+The
+.Fn SIG_CONTSIGMASK
+macro clears the
+.Dv SIGCONT
+signal from
+.Fa set .
+.Fn SIG_CONTSIGMASK
+is call when a process is stopped.
+.Pp
+The
+.Fn SIGPENDING
+macro determines if the given process has any pending signals that are
+not masked.
+If the process has a pending signal and the process is currently being
+traced
+.Fn SIGPENDING
+will return true even if the signal is masked.
+.Pp
+The
+.Fn CURSIG
+function returns the signal number that should be delivered to
+.Fa p .
+If there are no signals pending zero is returned.
+.Pp
+The
+.Fn execsigs
+function resets the signal set and signal stack of a process in preparation
+for an
+.Fn exec 2 .
+The lock for
+.Fa p
+must be held before
+.Fn execsigs
+is called.
+.Pp
+The
+.Fn issignal
+function determines if there are any pending signals for
+.Fa p
+that should be caught, cause
+.Fa p
+to terminate or interrupt the
+current system call.
+If
+.Fa p
+is currently being traced, ignored signals will be handled and
+.Fa p
+is always stopped.
+Stop signals are handled and cleared right away by
+.Fn issignal ,
+unless the process is a member of an orphaned process group and the stop
+signal originated from a tty.
+.Fa sched_lock
+may be acquired and released and if
+.Fa Giant
+is held it may be released and reacquired.
+.Fa p
+must be locked before
+.Fn issignal
+is called and may be released and reacquired during the call; as well,
+.Fa p's
+parent's lock may be acquired and released.
+Default signal actions are not taken for system processes and init.
+.Pp
+The
+.Fn killproc
+function delivers
+.Dv SIGKILL to
+.Fa p .
+.Fa why
+is logged as the reason "why" the process was killed.
+.Pp
+The
+.Fn pgsigio
+function sends the signal
+.Fa sig
+to the process or process group
+.Fa sigiop->sio_pgid .
+If
+.Fa checkctty
+is non-zero the signal is only delivered to processes in the process group
+that have a controlling terminal.
+If
+.Va sigiop->sio_pgid
+is for a process (\> 0), the lock for
+.Va sigiop->sio_proc
+is acquired and released.
+If
+.Va sigiop->sio_pgid
+is for a process group (\< 0), the process group lock for
+.Va sigiop->sio_pgrp
+is acquired and released.
+.Fa sigio_lock
+is acquired and released.
+.Pp
+The
+.Fn postsig
+function handles the actual delivery of the signal
+.Fa sig .
+.Fn postsig
+is called called from
+.Fn ast
+after the kernel has been notified that a signal should be delivered
+(via a call to
+.Fn signotify ,
+which causes the flag
+.Dv PS_NEEDSIGCHK
+to be set).
+The lock for process that owns
+.Va curthread
+must be held before
+.Fn postsig
+is called, and the current process cannot be 0.
+.Pp
+The
+.Fn sigexit
+function causes the process that owns
+.Fa td
+to exit with a return value of signal number
+.Fa sig.
+If required, the process will dump core.
+The lock for the process that owns
+.Fa td
+must be held before
+.Fn sigexit
+is called, and
+.Fa Giant
+will be acquired if it is not already held.
+.Pp
+The
+.Fn siginit
+function is called during system initialization to cause every signal except
+.Dv SIGCONT
+to be ignored by process 0.
+.Pp
+The
+.Fn signotify
+function flags that there are unmasked signals pending that
+.Fn ast
+should handle.
+The lock for
+.Pa p
+must be held before
+.Fn signotify
+is called, and
+.Fa sched_lock
+is acquired and released.
+.Pp
+The
+.Fn trapsignal
+function sends a signal that is the result of a trap to
+.Fa p .
+If the process is not being traced and the signal can be delivered
+immediately
+.Fn trapsignal
+will deliver it directly; otherwise,
+.Fn trapsignal
+will call
+.Xr psignal 9
+to cuase signal to will be delivered later.
+Giant is acquired and released, as is the lock for
+.Fa p .
+.Sh RETURN VALUES
+The
+.Fn SIGISMEMBER ,
+.Fn SIGISEMPTY ,
+.Fn SIGNOTEMPTY ,
+.Fn SIGSETEQ ,
+.Fn SIGSETNEQ ,
+and
+.Fn SIGPENDING
+macros all return non\-zero (true) if the condition they are checking
+is found to be true; otherwise, zero (false) is returned.
+.Pp
+.Fn CURSIG
+returns either a valid signal number or zero.
+.Pp
+.Fn issignal
+returns either a valid signal number or zero.
+.Sh SEE ALSO
+.Xr gsignal 9 ,
+.Xr pgsignal 9 ,
+.Xr psignal 9
+.Sh AUTHORS
+This man page was written by
+.An Chad David Aq davidc@FreeBSD.org .
OpenPOWER on IntegriCloud