8322 nl: misleading-indentation
[unleashed/tickless.git] / usr / src / man / man3head / signal.h.3head
blob0d213e8fd740ca7d0b9bfdd4079df787b6ec105d
1 '\" te
2 .\" Copyright (c) 1995 IEEE.  All Rights Reserved.
3 .\" Portions Copyright (c) 2008, Sun Microsystems, Inc.  All Rights Reserved.
4 .\" Sun Microsystems, Inc. gratefully acknowledges The Open Group for permission to reproduce portions of its copyrighted documentation. Original documentation from The Open Group can be obtained online at
5 .\" http://www.opengroup.org/bookstore/.
6 .\" The Institute of Electrical and Electronics Engineers and The Open Group, have given us permission to reprint portions of their documentation. In the following statement, the phrase "this text" refers to portions of the system documentation. Portions of this text are reprinted and reproduced in electronic form in the Sun OS Reference Manual, from IEEE Std 1003.1, 2004 Edition, Standard for Information Technology -- Portable Operating System Interface (POSIX), The Open Group Base Specifications Issue 6, Copyright (C) 2001-2004 by the Institute of Electrical and Electronics Engineers, Inc and The Open Group. In the event of any discrepancy between these versions and the original IEEE and The Open Group Standard, the original IEEE and The Open Group Standard is the referee document. The original Standard can be obtained online at http://www.opengroup.org/unix/online.html.
7 .\"  This notice shall appear on any product containing this material.
8 .\" The contents of this file are subject to the terms of the Common Development and Distribution License (the "License").  You may not use this file except in compliance with the License.
9 .\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE or http://www.opensolaris.org/os/licensing.  See the License for the specific language governing permissions and limitations under the License.
10 .\" When distributing Covered Code, include this CDDL HEADER in each file and include the License file at usr/src/OPENSOLARIS.LICENSE.  If applicable, add the following below this CDDL HEADER, with the fields enclosed by brackets "[]" replaced with your own identifying information: Portions Copyright [yyyy] [name of copyright owner]
11 .TH SIGNAL.H 3HEAD "Jan 4, 2014"
12 .SH NAME
13 signal.h, signal \- base signals
14 .SH SYNOPSIS
15 .LP
16 .nf
17 \fB#include <signal.h>\fR
18 .fi
20 .SH DESCRIPTION
21 .sp
22 .LP
23 A signal is an asynchronous notification of an event. A signal is said to be
24 generated for (or sent to) a process when the event associated with that signal
25 first occurs. Examples of such events include hardware faults, timer expiration
26 and terminal activity, as well as the invocation of the \fBkill\fR(2) or
27 \fBsigsend\fR(2) functions. In some circumstances, the same event generates
28 signals for multiple processes. A process may request a detailed notification
29 of the source of the signal and the reason why it was generated. See
30 \fBsiginfo.h\fR(3HEAD).
31 .sp
32 .LP
33 Signals can be generated synchronously or asynchronously. Events directly
34 caused by the execution of code by a thread, such as a reference to an
35 unmapped, protected, or bad memory can generate \fBSIGSEGV\fR or \fBSIGBUS\fR;
36 a floating point exception can generate \fBSIGFPE\fR; and the execution of an
37 illegal instruction can generate \fBSIGILL\fR. Such events are referred to as
38 traps; signals generated by traps are said to be synchronously generated.
39 Synchronously generated signals are initiated by a specific thread and are
40 delivered to and handled by that thread.
41 .sp
42 .LP
43 Signals may also be generated by calling \fBkill()\fR, \fBsigqueue()\fR, or
44 \fBsigsend()\fR. Events such as keyboard interrupts generate signals, such as
45 \fBSIGINT\fR, which are sent to the target process. Such events are referred to
46 as interrupts; signals generated by interrupts are said to be asynchronously
47 generated. Asynchronously generated signals are not directed to a particular
48 thread but are handled by an arbitrary thread that meets either of the
49 following conditions:
50 .RS +4
51 .TP
52 .ie t \(bu
53 .el o
54 The thread is blocked in a call to \fBsigwait\fR(2) whose argument includes the
55 type of signal generated.
56 .RE
57 .RS +4
58 .TP
59 .ie t \(bu
60 .el o
61 The thread has a signal mask that does not include the type of signal
62 generated. See \fBpthread_sigmask\fR(3C). Each process can specify a system
63 action to be taken in response to each signal sent to it, called the signal's
64 disposition. All threads in the process share the disposition. The set of
65 system signal actions for a process is initialized from that of its parent.
66 Once an action is installed for a specific signal, it usually remains installed
67 until another disposition is explicitly requested by a call to either
68 \fBsigaction()\fR, \fBsignal()\fR or  \fBsigset()\fR, or until the process
69 \fBexecs()\fR. See \fBsigaction\fR(2) and  \fBsignal\fR(3C). When a process
70 execs, all signals whose disposition has been set to catch the signal will be
71 set to \fBSIG_DFL.\fR Alternatively, a process may request that the system
72 automatically reset the disposition of a signal to  \fBSIG_DFL\fR after it has
73 been caught. See \fBsigaction\fR(2) and \fBsignal\fR(3C).
74 .RE
75 .SS "SIGNAL DELIVERY"
76 .sp
77 .LP
78 A signal is said to be delivered to a process when a thread within the process
79 takes the appropriate action for  the disposition of the signal. Delivery of a
80 signal can be blocked. There are two methods for handling delivery of a signal
81 in a multithreaded application. The first method specifies a signal handler
82 function to execute when the signal is received by the process. See
83 \fBsigaction\fR(2). The second method uses \fBsigwait\fR(2) to create a thread
84 to handle the receipt of the signal. The \fBsigaction()\fR function can be used
85 for both synchronously and asynchronously generated signals. The
86 \fBsigwait()\fR function will work only for asynchronously generated signals,
87 as synchronously generated signals are sent to the thread that caused the
88 event. The \fBsigwait()\fR function is the recommended for use with a
89 multithreaded application.
90 .SS "SIGNAL MASK"
91 .sp
92 .LP
93 Each thread has a signal mask  that defines the set of signals currently
94 blocked from delivery to it. The signal mask of the main thread is inherited
95 from the signal mask of the thread that created it in the parent process. The
96 selection of the thread within the process that is to take the appropriate
97 action for the signal is based on the method of signal generation and the
98 signal masks of the threads in the receiving process. Signals that are
99 generated by action of a particular thread such as hardware faults are
100 delivered to the thread that caused the signal. See \fBpthread_sigmask\fR(3C)
101 or \fBsigprocmask\fR(2). See \fBalarm\fR(2) for current semantics of delivery
102 of \fBSIGALRM\fR. Signals that are directed to a particular thread  are
103 delivered to the targeted thread. See \fBpthread_kill\fR(3C). If the selected
104 thread has blocked the signal, it remains pending on the thread until it is
105 unblocked.  For all other types of signal generation  (for example,
106 \fBkill\fR(2), \fBsigsend\fR(2), terminal activity, and other external events
107 not ascribable to a particular thread) one of the threads that does not have
108 the signal blocked is selected to process the signal. If all the threads within
109 the process block the signal, it remains pending on the process until a thread
110 in the process unblocks it. If the action associated with a signal is set to
111 ignore the signal then both currently pending and subsequently generated
112 signals of this type are discarded immediately for this process.
115 The determination of which action is taken in response to a signal  is made at
116 the time the signal is delivered to a thread within the process, allowing for
117 any changes since the time of generation.   This determination is independent
118 of the means by which the signal was originally generated.
121 The signals currently defined by <\fBsignal.h\fR> are as follows:
126 c c c c
127 l l l l .
128 Name    Value   Default Event
129 \fBSIGHUP\fR    1       Exit    Hangup (see \fBtermio\fR(7I))
130 \fBSIGINT\fR    2       Exit    Interrupt (see \fBtermio\fR(7I))
131 \fBSIGQUIT\fR   3       Core    Quit (see \fBtermio\fR(7I))
132 \fBSIGILL\fR    4       Core    Illegal Instruction
133 \fBSIGTRAP\fR   5       Core    Trace or Breakpoint Trap
134 \fBSIGABRT\fR   6       Core    Abort
135 \fBSIGEMT\fR    7       Core    Emulation Trap
136 \fBSIGFPE\fR    8       Core    Arithmetic Exception
137 \fBSIGKILL\fR   9       Exit    Killed
138 \fBSIGBUS\fR    10      Core    Bus Error
139 \fBSIGSEGV\fR   11      Core    Segmentation Fault
140 \fBSIGSYS\fR    12      Core    Bad System Call
141 \fBSIGPIPE\fR   13      Exit    Broken Pipe
142 \fBSIGALRM\fR   14      Exit    Alarm Clock
143 \fBSIGTERM\fR   15      Exit    Terminated
144 \fBSIGUSR1\fR   16      Exit    User Signal 1
145 \fBSIGUSR2\fR   17      Exit    User Signal 2
146 \fBSIGCHLD\fR   18      Ignore  Child Status Changed
147 \fBSIGPWR\fR    19      Ignore  Power Fail or Restart
148 \fBSIGWINCH\fR  20      Ignore  Window Size Change
149 \fBSIGURG\fR    21      Ignore  Urgent Socket Condition
150 \fBSIGPOLL\fR   22      Exit    Pollable Event (see \fBstreamio\fR(7I))
151 \fBSIGSTOP\fR   23      Stop    Stopped (signal)
152 \fBSIGTSTP\fR   24      Stop    Stopped (user) (see \fBtermio\fR(7I))
153 \fBSIGCONT\fR   25      Ignore  Continued
154 \fBSIGTTIN\fR   26      Stop    Stopped (tty input) (see \fBtermio\fR(7I))
155 \fBSIGTTOU\fR   27      Stop    Stopped (tty output) (see \fBtermio\fR(7I))
156 \fBSIGVTALRM\fR 28      Exit    Virtual Timer Expired
157 \fBSIGPROF\fR   29      Exit    Profiling Timer Expired
158 \fBSIGXCPU\fR   30      Core    T{
159 CPU time limit exceeded (see \fBgetrlimit\fR(2))
161 \fBSIGXFSZ\fR   31      Core    T{
162 File size limit exceeded (see \fBgetrlimit\fR(2))
164 \fBSIGWAITING\fR        32      Ignore  Reserved
165 \fBSIGLWP\fR    33      Ignore  Reserved
166 \fBSIGFREEZE\fR 34      Ignore  Check point Freeze
167 \fBSIGTHAW\fR   35      Ignore  Check point Thaw
168 \fBSIGCANCEL\fR 36      Ignore  Reserved for threading support
169 \fBSIGLOST\fR   37      Exit    T{
170 Resource lost (for example, record-lock lost)
172 \fBSIGXRES\fR   38      Ignore  T{
173 Resource control exceeded (see \fBsetrctl\fR(2))
175 \fBSIGJVM1\fR   39      Ignore  Reserved for Java Virtual Machine 1
176 \fBSIGJVM2\fR   40      Ignore  Reserved for Java Virtual Machine 2
177 \fBSIGINFO\fR   41      Ignore  Status request
178 \fBSIGRTMIN\fR  \fB*\fR Exit    First real time signal
179 (\fBSIGRTMIN\fR+1)      *       Exit    Second real time signal
180 \fB\|.\|.\|.\fR                 
181 (\fBSIGRTMAX\fR-1)      *       Exit    Second-to-last real time signal
182 \fBSIGRTMAX\fR  \fB*\fR Exit    Last real time signal
187 The symbols \fBSIGRTMIN\fR through \fBSIGRTMAX\fR are evaluated dynamically to
188 permit future configurability.
191 Applications should not use any of the signals marked "reserved" in the above
192 table for any purpose, to avoid interfering with their use by the system.
193 .SS "SIGNAL DISPOSITION"
196 A process using a \fBsignal\fR(3C), \fBsigset\fR(3C) or \fBsigaction\fR(2)
197 system call can specify one of three dispositions for a signal: take the
198 default action for the signal, ignore the signal, or catch the signal.
199 .SS "Default Action: SIG_DFL"
202 A disposition of  \fBSIG_DFL\fR specifies the default action. The default
203 action for each signal is listed in the table above and is selected from the
204 following:
206 .ne 2
208 \fBExit\fR
210 .RS 10n
211 When it gets the signal, the receiving process is to be terminated with all the
212 consequences outlined in \fBexit\fR(2).
216 .ne 2
218 \fBCore\fR
220 .RS 10n
221 When it gets the signal, the receiving process is to be terminated with all the
222 consequences outlined in \fBexit\fR(2). In addition, a ``core image'' of the
223 process is constructed in the  current working directory.
227 .ne 2
229 \fBStop\fR
231 .RS 10n
232 When it gets the signal, the receiving process is to stop. When a process is
233 stopped, all the threads within the process also stop executing.
237 .ne 2
239 \fBIgnore\fR
241 .RS 10n
242 When it gets the signal, the receiving process is to ignore it. This is
243 identical to setting the disposition to \fBSIG_IGN\fR.
246 .SS "Ignore Signal: SIG_IGN"
249 A disposition of \fBSIG_IGN\fR specifies that the signal is to be ignored.
250 Setting a signal action to \fBSIG_IGN\fR for a signal that is pending causes
251 the pending signal to be discarded, whether or not it is blocked. Any queued
252 values pending are also discarded, and the resources used to queue them are
253 released and made available to queue other signals.
254 .SS "Catch Signal: function address"
257 A disposition that is a function address specifies that, when it gets the
258 signal, the thread within the process that is selected to process the signal
259 will execute the signal handler at the specified address. Normally, the signal
260 handler is passed the signal number as its only argument. If the disposition
261 was set with the \fBsigaction\fR(2) function, however, additional arguments can
262 be requested. When the signal handler returns, the receiving process resumes
263 execution at the point it was interrupted, unless the signal handler makes
264 other arrangements. If an invalid function address is specified, results are
265 undefined.
268 If the disposition has been set with the \fBsigset()\fR or \fBsigaction()\fR,
269 the signal is automatically blocked in the thread while it is executing the
270 signal catcher. If a \fBlongjmp()\fR is used to leave the signal catcher, then
271 the signal must be explicitly unblocked by the user. See \fBsetjmp\fR(3C),
272 \fBsignal\fR(3C) and \fBsigprocmask\fR(2).
275 If execution of the signal handler interrupts a blocked function call, the
276 handler is executed and the interrupted function call returns  \fB\(mi1\fR to
277 the calling process with \fBerrno\fR set to \fBEINTR\fR. If the
278 \fBSA_RESTART\fR flag is set, however, certain function calls will be
279 transparently restarted.
282 Some signal-generating functions, such as high resolution timer expiration,
283 asynchronous I/O completion, inter-process message arrival, and the
284 \fBsigqueue\fR(3C) function, support the specification of an application
285 defined value, either explicitly as a parameter to the function, or in a
286 \fBsigevent\fR structure parameter. The \fBsigevent\fR structure is defined by
287 \fB<signal.h>\fR and contains at least the following members:
292 c c c
293 l l l .
294 Type    Name    Description
296 \fBint\fR       \fBsigev_notify\fR      Notification type
297 \fBint\fR       \fBsigev_signo\fR       Signal number
299 \fBunion sigval\fR      \fBsigev_value\fR       Signal value
301 \fBvoid(*)(union sigval)\fR     \fBsigev_notify_function\fR     Notification function
303 \fB(pthread_attr_t *)\fR        \fBsigev_notify_attributes\fR   Notification attributes
308 The \fBsigval\fR union is defined by \fB<signal.h>\fRand contains at least the
309 following members:
314 c c c
315 l l l .
316 Type    Name    Description
318 \fBint\fR       \fBsival_int\fR Integer signal value
319 \fBvoid *\fR    \fBsival_ptr\fR Pointer signal value
324 The  \fBsigev_notify\fR member specifies the notification mechanism to use when
325 an asynchronous event occurs. The \fBsigev_notify\fR member may be defined with
326 the following values:
328 .ne 2
330 \fB\fBSIGEV_NONE\fR\fR
332 .RS 16n
333 No asynchronous notification is delivered when the event of interest occurs.
337 .ne 2
339 \fB\fBSIGEV_SIGNAL\fR\fR
341 .RS 16n
342 A queued signal, with its value equal to \fBsigev_signo\fR, is generated when
343 the event of interest occurs.
347 .ne 2
349 \fB\fBSIGEV_THREAD\fR\fR
351 .RS 16n
352 The \fBsigev_notify_function\fR is called, with \fBsigev_value\fR as its
353 argument, to perform notification when the asynchronous event occurs. The
354 function is executed in an environment as if it were the start routine for a
355 newly created thread with thread attributes \fBsigev_notify_attributes\fR. If
356 \fBsigev_notify_attributes\fR is \fINULL\fR, the thread runs as a detached
357 thread with default attributes. Otherwise, the thread runs with the specified
358 attributes, but as a detached thread regardless. The thread runs with all
359 blockable signals blocked.
363 .ne 2
365 \fB\fBSIGEV_PORT\fR\fR
367 .RS 16n
368 An asynchronous notification is delivered to an event port when the event of
369 interest occurs. The \fBsigev_value.sival_ptr\fR member points to a
370 \fBport_notify_t\fR structure defined in <\fBport.h\fR> (see
371 \fBport_associate\fR(3C)). The event port identifier as well as an
372 application-defined cookie are part of the \fBport_notify_t\fR structure.
377 The \fBsigev_signo\fR member contains the application-defined value to be
378 passed to the signal-catching function (for notification type
379 \fBSIGEV_SIGNAL\fR) at the time of the signal delivery as the \fBsi_value\fR
380 member of the \fBsiginfo_t\fR structure, or as the argument to the notification
381 function (for notification type \fBSIGEV_THREAD\fR) that is called when the
382 asynchronous event occurs.  For notification type \fBSIGEV_PORT\fR,
383 \fBsigev_value.sival_ptr\fR points to a \fBport_notify_t\fR structure that
384 specifies the port and an application-defined cookie.
387 The \fBsigev_value\fR member references the application defined value to be
388 passed to the signal-catching function at the time of the signal delivery as
389 the \fBsi_value\fR member of the \fBsiginfo_t\fR structure.
392 The \fBsival_int\fR member is used when the application defined value is of
393 type \fBint\fR, and the \fBsival_ptr\fR member is used when the application
394 defined value is a pointer.
397 When a signal is generated by \fBsigqueue\fR(3C) or any signal\(migenerating
398 function which supports the specification of an application defined value, the
399 signal is marked pending and, if the  \fBSA_SIGINFO\fR flag is set for that
400 signal, the signal is queued to the process along with the application
401 specified signal value. Multiple occurrences of signals so generated are queued
402 in FIFO order. If the  \fBSA_SIGINFO\fR flag is not set for that signal, later
403 occurrences of that signal's generation, when a signal is already queued, are
404 silently discarded.
405 .SH ATTRIBUTES
408 See \fBattributes\fR(5) for descriptions of the following attributes:
413 box;
414 c | c
415 l | l .
416 ATTRIBUTE TYPE  ATTRIBUTE VALUE
418 Interface Stability     Committed
420 Standard        See \fBstandards\fR(5).
423 .SH SEE ALSO
426 \fBlockd\fR(1M), \fBIntro\fR(2), \fBalarm\fR(2), \fBexit\fR(2), \fBfcntl\fR(2),
427 \fBgetrlimit\fR(2), \fBioctl\fR(2), \fBkill\fR(2), \fBpause\fR(2),
428 \fBsetrctl\fR(2), \fBsigaction\fR(2), \fBsigaltstack\fR(2),
429 \fBsigprocmask\fR(2), \fBsigsend\fR(2), \fBsigsuspend\fR(2), \fBsigwait\fR(2),
430 \fBport_associate\fR(3C), \fBpthread_create\fR(3C), \fBpthread_kill\fR(3C),
431 \fBpthread_sigmask\fR(3C), \fBsetjmp\fR(3C), \fBsiginfo.h\fR(3HEAD),
432 \fBsignal\fR(3C), \fBsigqueue\fR(3C), \fBsigsetops\fR(3C),
433 \fBucontext.h\fR(3HEAD), \fBwait\fR(3C), \fBattributes\fR(5),
434 \fBstandards\fR(5)
435 .SH NOTES
438 The dispositions of the \fBSIGKILL\fR and \fBSIGSTOP\fR signals cannot be
439 altered from their default values. The system generates an error if this is
440 attempted.
443 The \fBSIGKILL\fR, \fBSIGSTOP\fR, and \fBSIGCANCEL\fR signals cannot be
444 blocked. The system silently enforces this restriction.
447 The \fBSIGCANCEL\fR signal cannot be directed to an individual thread using
448 \fBpthread_kill\fR(3C), but it can be sent to a process using \fBkill\fR(2),
449 \fBsigsend\fR(2), or \fBsigqueue\fR(3C).
452 Whenever a process receives a \fBSIGSTOP\fR, \fBSIGTSTP\fR, \fBSIGTTIN\fR, or
453 \fBSIGTTOU\fR signal, regardless of its disposition, any pending \fBSIGCONT\fR
454 signal are discarded.
457 Whenever a process receives a \fBSIGCONT\fR signal, regardless of its
458 disposition, any pending \fBSIGSTOP\fR, \fBSIGTSTP\fR, \fBSIGTTIN\fR, and
459 \fBSIGTTOU\fR signals is discarded. In addition, if the process was stopped, it
460 is continued.
463 \fBSIGPOLL\fR is issued when a file descriptor corresponding to a STREAMS file
464 has a "selectable" event pending. See \fBIntro\fR(2). A process must
465 specifically request that this signal be sent using the \fBI_SETSIG\fR
466 \fBioctl\fR call. Otherwise, the process will never receive \fBSIGPOLL\fR.
469 If the disposition of the \fBSIGCHLD\fR signal has been set with \fBsignal()\fR
470 or \fBsigset()\fR, or with \fBsigaction()\fR and the \fBSA_NOCLDSTOP\fR flag
471 has been specified, it will only be sent to the calling process when its
472 children exit; otherwise, it will also be sent when the calling process's
473 children are stopped or continued due to job control.
476 The name \fBSIGCLD\fR is also defined in this header and identifies the same
477 signal as  \fBSIGCHLD\fR. \fBSIGCLD\fR is provided for backward compatibility,
478 new applications should use  \fBSIGCHLD\fR.
481 The disposition of signals that are inherited as \fBSIG_IGN\fR should not be
482 changed.
485 Signals which are generated synchronously should not be masked. If such a
486 signal is blocked and delivered, the receiving process is killed.