|
|
1.1 root 1: .\" Copyright (c) 1980, 1990 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" Redistribution and use in source and binary forms are permitted provided
5: .\" that: (1) source distributions retain this entire copyright notice and
6: .\" comment, and (2) distributions including binaries display the following
7: .\" acknowledgement: ``This product includes software developed by the
8: .\" University of California, Berkeley and its contributors'' in the
9: .\" documentation or other materials provided with the distribution and in
10: .\" all advertising materials mentioning features or use of this software.
11: .\" Neither the name of the University nor the names of its contributors may
12: .\" be used to endorse or promote products derived from this software without
13: .\" specific prior written permission.
14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
15: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
16: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17: .\"
18: .\" @(#)sigaction.2 6.1 (Berkeley) 7/1/90
19: .\"
20: .TH SIGACTION 2 "July 1, 1990"
21: .UC 7
22: .ie t .ds d \(dg
23: .el .ds d \z'|+'
24: .ie t .ds p \(dd
25: .el .ds p \z'|='
26: .ie t .ds b \(bu
27: .el .ds b @
28: .SH NAME
29: sigaction \- software signal facilities
30: .SH SYNOPSIS
31: .nf
32: .B #include <signal.h>
33: .PP
34: .B struct sigaction {
35: .B void (*sa_handler)();
36: .B sigset_t sa_mask;
37: .B int sa_flags;
38: .B };
39: .PP
40: .B sigaction(sig, act, oact)
41: .B int sig;
42: .B struct sigaction *act, *oact;
43: .fi
44: .SH DESCRIPTION
45: The system defines a set of signals that may be delivered to a process.
46: Signal delivery resembles the occurence of a hardware interrupt:
47: the signal is blocked from further occurrence, the current process
48: context is saved, and a new one is built. A process may specify a
49: .I handler
50: to which a signal is delivered, or specify that a signal is to be
51: .IR ignored .
52: A process may also specify that a default action is to be taken
53: by the system when a signal occurs.
54: A signal may also be
55: .IR blocked ,
56: in which case its delivery is postponed until it is
57: .IR unblocked .
58: The action to be taken on delivery is determined at the time
59: of delivery.
60: Normally, signal handlers execute on the current stack
61: of the process. This may be changed, on a per-handler basis,
62: so that signals are taken on a special
63: .IR "signal stack" .
64: .PP
65: Signal routines execute with the signal that caused their
66: invocation
67: .IR blocked ,
68: but other signals may yet occur.
69: A global
70: .I "signal mask"
71: defines the set of signals currently blocked from delivery
72: to a process. The signal mask for a process is initialized
73: from that of its parent (normally empty). It
74: may be changed with a
75: .IR sigprocmask (2)
76: call, or when a signal is delivered to the process.
77: .PP
78: When a signal
79: condition arises for a process, the signal is added to a set of
80: signals pending for the process.
81: If the signal is not currently
82: .I blocked
83: by the process then it is delivered to the process.
84: Signals may be delivered any time a process enters the operating system
85: (e.g., during a system call, page fault or trap, or clock interrupt).
86: If multiple signals are ready to be delivered at the same time,
87: any signals that could be caused by traps are delivered first.
88: Additional signals may be processed at the same time, with each
89: appearing to interrupt the handlers for the previous signals
90: before their first instructions.
91: The set of pending signals is returned by the
92: .IR sigpending (2)
93: function.
94: When a caught signal
95: is delivered, the current state of the process is saved,
96: a new signal mask is calculated (as described below),
97: and the signal handler is invoked. The call to the handler
98: is arranged so that if the signal handling routine returns
99: normally the process will resume execution in the context
100: from before the signal's delivery.
101: If the process wishes to resume in a different context, then it
102: must arrange to restore the previous context itself.
103: .PP
104: When a signal is delivered to a process a new signal mask is
105: installed for the duration of the process' signal handler
106: (or until a
107: .I sigprocmask
108: call is made).
109: This mask is formed by taking the union of the current signal mask set,
110: the signal to be delivered, and
111: the signal mask associated with the handler to be invoked.
112: .PP
113: .I Sigaction
114: assigns an action for a specific signal.
115: If
116: .I act
117: is non-zero, it
118: specifies an action (SIG_DFL, SIG_IGN, or a handler routine) and mask
119: to be used when delivering the specified signal.
120: If
121: .I oact
122: is non-zero, the previous handling information for the signal
123: is returned to the user.
124: .PP
125: Once a signal handler is installed, it remains installed
126: until another
127: .I sigaction
128: call is made, or an
129: .IR execve (2)
130: is performed.
131: The default action for a signal may be reinstated by setting
132: .I sa_handler
133: to SIG_DFL.
134: The default actions are termination, possibly with a core image;
135: no action; stopping the process; or continuing the process.
136: See the signal list below for each signal's default action.
137: If
138: .I sa_handler
139: is SIG_IGN the signal is subsequently ignored,
140: and pending instances of the signal are discarded.
141: .PP
142: Options may be specified by setting
143: .IR sa_flags .
144: If the SA_NOCLDSTOP bit is set when installing a catching function
145: for the SIGCHLD signal,
146: the SIGCHLD signal will be generated only when a child process exits,
147: not when a child process stops.
148: Further, if the SA_ONSTACK bit is set in
149: .I sa_flags,
150: the system will deliver the signal to the process on a
151: .IR "signal stack" ,
152: specified with
153: .IR sigstack (2).
154: .PP
155: If a caught signal occurs during certain system calls,
156: the call may be forced to terminate prematurely
157: with an EINTR error return,
158: or the call may be restarted.
159: Restart of pending calls is requested
160: by setting the SA_RESTART bit in
161: .I sa_flags.
162: The affected system calls include
163: .IR read (2),
164: .IR write (2),
165: .IR sendto (2),
166: .IR recvfrom (2),
167: .IR sendmsg (2)
168: and
169: .IR recvmsg (2)
170: on a communications channel or a slow device (such as a terminal,
171: but not a regular file)
172: and during a
173: .IR wait (2)
174: or
175: .IR ioctl (2).
176: However, calls that have already committed are not restarted,
177: but instead return a partial success (for example, a short read count).
178: .PP
179: After a
180: .IR fork (2)
181: or
182: .IR vfork (2)
183: the child inherits
184: all signals, the signal mask, the signal stack,
185: and the restart/interrupt flags.
186: .PP
187: .IR Execve (2)
188: resets all
189: caught signals to default action and
190: resets all signals to be caught on the user stack.
191: Ignored signals remain ignored;
192: the signal mask remains the same;
193: signals that restart pending system calls continue to do so.
194: .PP
195: The following is a list of all signals
196: with names as in the include file
197: .RI < signal.h >:
198: .LP
199: .nf
200: .RS
201: .ta \w'SIGVTALRM\0\0\0'u +\w'15*\*p\0\0'u
202: SIGHUP 1 hangup
203: SIGINT 2 interrupt
204: SIGQUIT 3* quit
205: SIGILL 4* illegal instruction
206: SIGTRAP 5*\*p trace trap
207: SIGABRT 6* \fIabort\fP() call (formerly SIGIOT)
208: SIGEMT 7*\*p EMT instruction
209: SIGFPE 8* floating point exception
210: SIGKILL 9 kill (cannot be caught, blocked, or ignored)
211: SIGBUS 10*\*p bus error
212: SIGSEGV 11* segmentation violation
213: SIGSYS 12*\*p bad argument to system call
214: SIGPIPE 13 write on a pipe with no one to read it
215: SIGALRM 14 alarm clock
216: SIGTERM 15 software termination signal
217: SIGURG 16\*b\*p urgent condition present on socket
218: SIGSTOP 17\*d stop (cannot be caught, blocked, or ignored)
219: SIGTSTP 18\*d stop signal generated from keyboard
220: SIGCONT 19\*b continue after stop
221: SIGCHLD 20\*b child status has changed
222: SIGTTIN 21\*d background read attempted from control terminal
223: SIGTTOU 22\*d background write attempted to control terminal
224: SIGIO 23\*b\*p i/o is possible on a descriptor (see \fIfcntl\fP(2))
225: SIGXCPU 24\*p cpu time limit exceeded (see \fIsetrlimit\fP(2))
226: SIGXFSZ 25\*p file size limit exceeded (see \fIsetrlimit\fP(2))
227: SIGVTALRM 26\*p virtual time alarm (see \fIsetitimer\fP(2))
228: SIGPROF 27\*p profiling timer alarm (see \fIsetitimer\fP(2))
229: SIGWINCH 28\*b\*p window size change
230: SIGINFO 29\*b\*p status request from keyboard
231: SIGUSR1 30 user-defined signal 1
232: SIGUSR2 31 user-defined signal 2
233: .RE
234: .fi
235: .PP
236: The default signal action is termination
237: if the signal is not caught or ignored,
238: except for signals marked with \*b or \*d.
239: The starred signals in the list above cause termination with a core image.
240: Signals marked with \*b are discarded if the action
241: is SIG_DFL; signals marked
242: with \*d cause the process to stop.
243: The signals marked with \*p are not defined by POSIX.
244: .SH NOTES
245: The mask specified in
246: .I act
247: is not allowed to block SIGKILL or SIGSTOP.
248: This is done silently by the system.
249: .SH "RETURN VALUE
250: A 0 value indicated that the call succeeded. A \-1 return value
251: indicates an error occurred and
252: .I errno
253: is set to indicated the reason.
254: .SH ERRORS
255: .I Sigaction
256: will fail and no new signal handler will be installed if one
257: of the following occurs:
258: .TP 15
259: [EFAULT]
260: Either
261: .I act
262: or
263: .I oact
264: points to memory that is not a valid part of the process
265: address space.
266: .TP 15
267: [EINVAL]
268: .I Sig
269: is not a valid signal number.
270: .TP 15
271: [EINVAL]
272: An attempt is made to ignore or supply a handler for SIGKILL
273: or SIGSTOP.
274: .SH STANDARDS
275: The
276: .I sigaction
277: function is defined by POSIX.1.
278: The SA_ONSTACK and SA_RESTART flags are Berkeley extensions,
279: as are the signals marked with \*p.
280: Most of those signals are available on most BSD-derived systems.
281: .SH "SEE ALSO"
282: kill(1), ptrace(2), kill(2),
283: sigaction(2), sigprocmask(2), sigsetops(2), sigsuspend(2),
284: sigblock(2), sigsetmask(2), sigpause(2),
285: sigstack(2), sigvec(2), setjmp(3), siginterrupt(3), tty(4)
286: .SH "NOTES (VAX-11)"
287: The handler routine can be declared:
288: .PP
289: void handler(sig, code, scp)
290: int sig, code;
291: struct sigcontext *scp;
292: .PP
293: Here
294: .I sig
295: is the signal number, into which the hardware faults and traps are
296: mapped as defined below.
297: .I Code
298: is a parameter that is either a constant
299: as given below or, for compatibility mode faults, the code provided by
300: the hardware (Compatibility mode faults are distinguished from the
301: other SIGILL traps by having PSL_CM set in the psl).
302: .I Scp
303: is a pointer to the
304: .I sigcontext
305: structure (defined in
306: .RI < signal.h >),
307: used to restore the context from before the signal.
308: .PP
309: The following defines the mapping of hardware traps to signals
310: and codes. All of these symbols are defined in
311: .RI < signal.h >:
312: .LP
313: .ta \w' Floating/decimal divide by zero 'u +\w'15* 'u +8n
314: .nf
315: Hardware condition Signal Code
316:
317: Arithmetic traps:
318: Integer overflow SIGFPE FPE_INTOVF_TRAP
319: Integer division by zero SIGFPE FPE_INTDIV_TRAP
320: Floating overflow trap SIGFPE FPE_FLTOVF_TRAP
321: Floating/decimal division by zero SIGFPE FPE_FLTDIV_TRAP
322: Floating underflow trap SIGFPE FPE_FLTUND_TRAP
323: Decimal overflow trap SIGFPE FPE_DECOVF_TRAP
324: Subscript-range SIGFPE FPE_SUBRNG_TRAP
325: Floating overflow fault SIGFPE FPE_FLTOVF_FAULT
326: Floating divide by zero fault SIGFPE FPE_FLTDIV_FAULT
327: Floating underflow fault SIGFPE FPE_FLTUND_FAULT
328: Length access control SIGSEGV
329: Protection violation SIGBUS
330: Reserved instruction SIGILL ILL_RESAD_FAULT
331: Customer-reserved instr. SIGEMT
332: Reserved operand SIGILL ILL_PRIVIN_FAULT
333: Reserved addressing SIGILL ILL_RESOP_FAULT
334: Trace pending SIGTRAP
335: Bpt instruction SIGTRAP
336: Compatibility-mode SIGILL hardware supplied code
337: Chme SIGSEGV
338: Chms SIGSEGV
339: Chmu SIGSEGV
340: .fi
341: .SH BUGS
342: This manual page is still confusing.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.