No empty .Rs/.Re
[netbsd-mini2440.git] / share / doc / psd / 05.sysman / 1.3.t
blob69b0fc85851668bd8fffcc473b927581945e69ea
1 .\"     $NetBSD: 1.3.t,v 1.2 1998/01/09 06:54:42 perry Exp $
2 .\"
3 .\" Copyright (c) 1983, 1993, 1994
4 .\"     The Regents of the University of California.  All rights reserved.
5 .\"
6 .\" Redistribution and use in source and binary forms, with or without
7 .\" modification, are permitted provided that the following conditions
8 .\" are met:
9 .\" 1. Redistributions of source code must retain the above copyright
10 .\"    notice, this list of conditions and the following disclaimer.
11 .\" 2. Redistributions in binary form must reproduce the above copyright
12 .\"    notice, this list of conditions and the following disclaimer in the
13 .\"    documentation and/or other materials provided with the distribution.
14 .\" 3. Neither the name of the University nor the names of its contributors
15 .\"    may be used to endorse or promote products derived from this software
16 .\"    without specific prior written permission.
17 .\"
18 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 .\" SUCH DAMAGE.
29 .\"
30 .\"     @(#)1.3.t       8.6 (Berkeley) 5/29/94
31 .\"
32 .Sh 2 "Signals
33 .PP
34 .Sh 3 "Overview
35 .PP
36 The system defines a set of \fIsignals\fP that may be delivered
37 to a process.  Signal delivery resembles the occurrence of a hardware
38 interrupt: the signal is blocked from further occurrence,
39 the current process context is saved, and a new one
40 is built.
41 A process may specify a \fIhandler\fP to which a signal is delivered,
42 or specify that the signal is to be \fIblocked\fP or \fIignored\fP.
43 A process may also specify that a
44 \fIdefault\fP action is to be taken when signals occur.
45 .PP
46 Some signals will cause a process to exit if they are not caught.
47 This may be accompanied by creation of a \fIcore\fP image file,
48 containing
49 the current memory image of the process for use in post-mortem debugging.
50 A process may also choose to have signals delivered on a special stack,
51 so that sophisticated software stack manipulations are possible.
52 .PP
53 All signals have the same \fIpriority\fP.
54 If multiple signals are pending,
55 signals that may be generated by the
56 program's action are delivered first; the order in which other signals
57 are delivered to a process is not specified.
58 Signal routines execute
59 with the signal that caused their invocation \fIblocked\fP, but other
60 signals may occur.
61 Multiple signals may be delivered on a single entry to the system,
62 as if signal handlers were interrupted by other signal handlers.
63 Mechanisms are provided whereby critical sections
64 of code may protect themselves against the occurrence of specified signals.
65 .Sh 3 "Signal types
66 .PP
67 The signals defined by the system fall into one of
68 five classes: hardware conditions,
69 software conditions, input/output notification, process control, or
70 resource control.
71 The set of signals is defined by the file \fI<signal.h>\fP.
72 .PP
73 Hardware signals are derived from exceptional conditions which
74 may occur during
75 execution.  Such signals include SIGFPE representing floating
76 point and other arithmetic exceptions, SIGILL for illegal instruction
77 execution, SIGSEGV for attempts to access addresses outside the
78 currently assigned area of memory,
79 and SIGBUS for accesses that violate memory access constraints.
80 .PP
81 Software signals reflect interrupts generated by user request:
82 SIGINT for the normal interrupt signal; SIGQUIT for the more
83 powerful \fIquit\fP signal, which normally causes a core image
84 to be generated; SIGHUP and SIGTERM that cause graceful
85 process termination, either because a user has ``hung up'', or
86 by user or program request; and SIGKILL, a more powerful termination
87 signal which a process cannot catch or ignore.
88 Programs may define their own asynchronous events using SIGUSR1
89 and SIGUSR2.
90 Other software signals (SIGALRM, SIGVTALRM, SIGPROF)
91 indicate the expiration of interval timers.
92 When a window changes size, a SIGWINCH is sent to the
93 controlling terminal process group.
94 .PP
95 A process can request notification via a SIGIO signal
96 when input or output is possible
97 on a descriptor, or when a \fInon-blocking\fP operation completes.
98 A process may request to receive a SIGURG signal when an
99 urgent condition arises. 
101 A process may be \fIstopped\fP by a signal sent to it or the members
102 of its process group.  The SIGSTOP signal is a powerful stop
103 signal, because it cannot be caught.  Other stop signals
104 SIGTSTP, SIGTTIN, and SIGTTOU are used when a user request, input
105 request, or output request respectively is the reason for stopping the process.
106 A SIGCONT signal is sent to a process when it is
107 continued from a stopped state.
108 Processes may receive notification with a SIGCHLD signal when
109 a child process changes state, either by stopping or by terminating.
111 Exceeding resource limits may cause signals to be generated.
112 SIGXCPU occurs when a process nears its CPU time limit and
113 SIGXFSZ when a process reaches the limit on file size.
114 .Sh 3 "Signal handlers
116 A process has a handler associated with each signal.
117 The handler controls the way the signal is delivered.
118 The call:
121 l s s
122 l l l.
123 struct sigaction {
124         void    (*sa_handler)();
125         sigset_t        sa_mask;
126         int     sa_flags;
131 .Fd sigaction 3 "setup software signal handler
132 sigaction(signo, sa, osa);
133 int signo; struct sigaction *sa; result struct sigaction *osa;
135 assigns interrupt handler address \fIsa_handler\fP to signal \fIsigno\fP.
136 Each handler address
137 specifies either an interrupt routine for the signal, that the
138 signal is to be ignored,
139 or that a default action (usually process termination) is to occur
140 if the signal occurs.
141 The constants
142 SIG_IGN and SIG_DFL used as values for \fIsa_handler\fP
143 cause ignoring or defaulting of a condition, respectively.
144 The \fIsa_mask\fP value specifies the
145 signal mask to be used when the handler is invoked; it implicitly includes
146 the signal which invoked the handler.
147 Signal masks include one bit for each signal.
148 The following macros, defined in \fIsignal.h\fP,
149 create an empty mask, then put \fIsigno\fP into it:
151 sigemptyset(set);
152 sigaddset(set, signo);
153 result sigset_t *set; int signo;
155 \fISa_flags\fP specifies whether pending system calls should be
156 restarted if the signal handler returns (SA_RESTART) and
157 whether the handler should operate on the normal run-time
158 stack or a special signal stack (SA_ONSTACK; see below).
159 If \fIosa\fP is non-zero, the previous signal handler information is returned.
161 When a signal condition arises for a process, the signal
162 is added to a set of signals pending for the process.
163 If the signal is not currently \fIblocked\fP by the process
164 it then will be delivered.
165 The process of signal delivery adds the signal to be delivered
166 and those signals specified in the associated signal
167 handler's \fIsa_mask\fP to a set of those \fImasked\fP
168 for the process, saves the current process context,
169 and places the process in the context of the signal
170 handling routine.  The call is arranged so that if the signal
171 handling routine returns normally, the signal mask will be restored
172 and the process will resume execution in the original context.
174 The mask of \fIblocked\fP signals is independent of handlers for
175 signals.  It delays signals from being delivered much as a
176 raised hardware interrupt priority level delays hardware interrupts.
177 Preventing an interrupt from occurring by changing the handler is analogous to
178 disabling a device from further interrupts.
180 The signal handling routine \fIsa_handler\fP is called by a C call
181 of the form:
183 (*sa_handler)(signo, code, scp);
184 int signo; long code; struct sigcontext *scp;
186 The \fIsigno\fP gives the number of the signal that occurred, and
187 the \fIcode\fP, a word of signal-specific information supplied by the hardware.
188 The \fIscp\fP parameter is a pointer to a machine-dependent
189 structure containing the information for restoring the
190 context before the signal.
191 Normally this context will be restored when the signal handler returns.
192 However, a process may do so at any time by using the call:
194 .Fd sigreturn 1 "return from a signal
195 sigreturn(scp);
196 struct sigcontext *scp;
198 If the signal handler makes a call to
199 .Fn longjmp ,
200 the signal mask at the time of the corresponding
201 .Fn setjmp
202 is restored.
203 .Sh 3 "Sending signals
205 A process can send a signal to another process or processes group
206 with the call:
208 .Fd kill 2 "send signal to a process
209 kill(pid, signo)
210 pid_t pid; int signo;
212 For compatibility with old systems,
213 a compatibility routine is provided to send a signal to a process group:
215 .Fd killpg 2 "send signal to a process group
216 killpg(pgrp, signo)
217 pid_t pgrp; int signo;
219 Unless the process sending the signal is privileged,
220 it must have the same effective user id as the process receiving the signal.
222 Signals also are sent implicitly from a terminal device to the
223 process group associated with the terminal when certain input characters
224 are typed.
225 .Sh 3 "Protecting critical sections
228 .Fn sigprocmask
229 system call is used to manipulate the mask of blocked signals:
231 .Fd sigprocmask 3 "manipulate current signal mask
232 sigprocmask(how, newmask, oldmask);
233 int how; sigset_t *newmask; result sigset_t *oldmask;
235 The actions done by
236 .Fn sigprocmask
237 are to add to the list of masked signals (SIG_BLOCK),
238 delete from the list of masked signals (SIG_UNBLOCK),
239 and block a specific set of signals (SIG_SETMASK).
241 .Fn sigprocmask
242 call can be used to read the current mask
243 by specifying SIG_BLOCK with an empty \fInewmask\fP\|.
245 It is possible to check conditions with some signals blocked,
246 and then to pause waiting for a signal and restoring the mask, by using:
248 .Fd sigsuspend 1 "atomically release blocked signals and wait for interrupt
249 sigsuspend(mask);
250 sigset_t *mask;
252 It is also possible to find out which blocked signals
253 are pending delivery using the call:
255 .Fd sigpending 1 "get pending signals
256 sigpending(mask);
257 result sigset_t *mask;
259 .Sh 3 "Signal stacks
261 Applications that maintain complex or fixed size stacks can use
262 the call:
265 l s s
266 l l l.
267 struct sigaltstack {
268         caddr_t ss_sp;
269         long    ss_size;
270         int     ss_flags;
275 .Fd sigaltstack 2 "set and/or get signal stack context
276 sigaltstack(ss, oss)
277 struct sigaltstack *ss; result struct sigaltstack *oss;
279 to provide the system with a stack based at \fIss_sp\fP of size
280 \fIss_size\fP for delivery of signals.
281 The value \fIss_flags\fP indicates whether the
282 process is currently on the signal stack,
283 a notion maintained in software by the system.
285 When a signal is to be delivered to a handler for which the SA_ONSTACK
286 flag was set, the system checks whether
287 the process is on a signal stack.  If not, then the process is switched
288 to the signal stack for delivery,
289 with the return from the signal doing a
290 .Fn sigreturn
291 to restore the previous stack.
292 If the process takes a non-local exit from the signal routine,
293 .Fn longjmp
294 will do a
295 .Fn sigreturn
296 call to switch back to the run-time stack.