1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
|
'\" te
.\" Copyright (c) 2008, Sun Microsystems, Inc. All Rights Reserved.
.\" Copyright 1989 AT&T
.\" 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.
.\" 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.
.\" 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]
.TH SIGINFO.H 3HEAD "Feb 5, 2008"
.SH NAME
siginfo.h, siginfo \- signal generation information
.SH SYNOPSIS
.LP
.nf
#include <siginfo.h>
.fi
.SH DESCRIPTION
.sp
.LP
If a process is catching a signal, it might request information that tells why
the system generated that signal. See \fBsigaction\fR(2). If a process is
monitoring its children, it might receive information that tells why a child
changed state. See \fBwaitid\fR(2). In either case, the system returns the
information in a structure of type \fBsiginfo_t\fR, which includes the
following information:
.sp
.in +2
.nf
int si_signo /* signal number */
int si_errno /* error number */
int si_code /* signal code */
union sigval si_value /* signal value */
.fi
.in -2
.sp
.LP
\fBsi_signo\fR contains the system-generated signal number. For the
\fBwaitid\fR(2) function, \fBsi_signo\fR is always \fBSIGCHLD\fR.
.sp
.LP
If \fBsi_errno\fR is non-zero, it contains an error number associated with
this signal, as defined in \fB<errno.h>\fR\&.
.sp
.LP
\fBsi_code\fR contains a code identifying the cause of the signal.
.sp
.LP
If the value of the \fBsi_code\fR member is \fBSI_NOINFO,\fR only the
\fBsi_signo\fR member of \fBsiginfo_t\fR is meaningful, and the value of all
other members is unspecified.
.SS "User Signals"
.sp
.LP
If the value of \fBsi_code\fR is less than or equal to 0, then the signal was
generated by a user process (see \fBkill\fR(2), \fB_lwp_kill\fR(2),
\fBsigqueue\fR(3C), \fBsigsend\fR(2), \fBabort\fR(3C), and \fBraise\fR(3C)) and
the \fBsiginfo\fR structure contains the following additional information:
.sp
.in +2
.nf
pid_t si_pid /* sending process ID */
uid_t si_uid /* sending user ID */
ctid_t si_ctid /* sending contract ID */
zoneid_t si_zoneid /* sending zone ID */S
.fi
.in -2
.sp
.LP
If the signal was generated by a user process, the following values are defined
for \fBsi_code\fR:
.sp
.ne 2
.na
\fB\fBSI_USER\fR \fR
.ad
.RS 15n
The implementation sets \fBsi_code\fR to \fBSI_USER\fR if the signal was sent
by \fBkill\fR(2), \fBsigsend\fR(2), \fBraise\fR(3C) or \fBabort\fR(3C).
.RE
.sp
.ne 2
.na
\fB\fBSI_LWP\fR \fR
.ad
.RS 15n
The signal was sent by \fB_lwp_kill\fR(2).
.RE
.sp
.ne 2
.na
\fB\fBSI_QUEUE\fR \fR
.ad
.RS 15n
The signal was sent by \fBsigqueue\fR(3C).
.RE
.sp
.ne 2
.na
\fB\fBSI_TIMER\fR \fR
.ad
.RS 15n
The signal was generated by the expiration of a timer created by
\fBtimer_settime\fR(3C).
.RE
.sp
.ne 2
.na
\fB\fBSI_ASYNCIO\fR \fR
.ad
.RS 15n
The signal was generated by the completion of an asynchronous \fBI/O\fR
request.
.RE
.sp
.ne 2
.na
\fB\fBSI_MESGQ\fR \fR
.ad
.RS 15n
The signal was generated by the arrival of a message on an empty message queue.
See \fBmq_notify\fR(3C).
.RE
.sp
.LP
\fBsi_value\fR contains the application specified value, which is passed to the
application's signal-catching function at the time of the signal delivery if
\fBsi_code\fR is any of \fBSI_QUEUE\fR, \fBSI_TIMER\fR, \fBSI_ASYNCHIO\fR, or
\fBSI_MESGQ\fR.
.SS "System Signals"
.sp
.LP
Non-user generated signals can arise for a number of reasons. For all of these
cases, \fBsi_code\fR contains a positive value reflecting the reason why the
system generated the signal:
.sp
.sp
.TS
l l l
l l l .
Signal Code Reason
_
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 co-processor error
ILL_BADSTK internal stack error
_
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 invalid floating point operation
FPE_FLTSUB subscript out of range
_
SIGSEGV SEGV_MAPERR address not mapped to object
SEGV_ACCERR invalid permissions for mapped object
_
SIGBUS BUS_ADRALN invalid address alignment
BUS_ADRERR non-existent physical address
BUS_OBJERR object specific hardware error
_
SIGTRAP TRAP_BRKPT process breakpoint
TRAP_TRACE process trace trap
_
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 had continued
_
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
.sp
.LP
Signals can also be generated from the resource control subsystem. Where these
signals do not already possess kernel-level \fBsiginfo\fR codes, the
\fBsiginfo\fR \fBsi_code\fR will be filled with \fBSI_RCTL\fR to indicate a
kernel-generated signal from an established resource control value.
.sp
.sp
.TS
c c c
l l l .
Signal Code Reason
_
SIGXRES SI_RCTL resource-control generated signal
_
SIGHUP
SIGTERM
.TE
.sp
.LP
The uncatchable signals \fBSIGSTOP\fR and \fBSIGKILL\fR have undefined
\fBsiginfo\fR codes.
.sp
.LP
Signals sent with a \fBsiginfo\fR code of \fBSI_RCTL\fR contain code-dependent
information for kernel-generated signals:
.sp
.sp
.TS
c c c
l l l .
Code Field Value
_
SI_RCTL hr_time si_entity process-model entity of control
.TE
.sp
.LP
In addition, the following signal-dependent information is available for
kernel-generated signals:
.sp
.sp
.TS
c c c
l l l .
Signal Field Value
_
SIGILL caddr_t si_addr address of faulting instruction
_
SIGFPE
_
SIGSEGV caddr_t si_addr address of faulting memory reference
SIGBUS
_
SIGCHLD pid_t si_pid child process ID
int si_status exit value or signal
_
SIGPOLL long si_band T{
band event for \fBPOLL_IN\fR, \fBPOLL_OUT\fR, or \fBPOLL_MSG\fR
T}
.TE
.SH SEE ALSO
.sp
.LP
\fB_lwp_kill\fR(2), \fBkill\fR(2), \fBsetrctl\fR(2), \fBsigaction\fR(2),
\fBsigsend\fR(2), \fBwaitid\fR(2), \fBabort\fR(3C), \fBaio_read\fR(3C),
\fBmq_notify\fR(3C), \fBraise\fR(3C), \fBsignal.h\fR(3HEAD),
\fBsigqueue\fR(3C), \fBtimer_create\fR(3C), \fBtimer_settime\fR(3C)
.SH NOTES
.sp
.LP
For \fBSIGCHLD\fR signals, if \fBsi_code\fR is equal to \fBCLD_EXITED,\fR
then \fBsi_status\fR is equal to the exit value of the process; otherwise, it
is equal to the signal that caused the process to change state. For some
implementations, the exact value of \fBsi_addr\fR might not be available; in
that case, \fBsi_addr\fR is guaranteed to be on the same page as the faulting
instruction or memory reference.
|