SIGINFO.H(3HEAD) Headers SIGINFO.H(3HEAD)
NAME
siginfo.h, siginfo - signal generation information
SYNOPSIS
#include <siginfo.h>
DESCRIPTION
If a process is catching a signal, it might request information that
tells why the system generated that signal. See
sigaction(2). If a
process is monitoring its children, it might receive information that
tells why a child changed state. See
waitid(2). In either case, the
system returns the information in a structure of type
siginfo_t, which
includes the following information:
int si_signo /* signal number */
int si_errno /* error number */
int si_code /* signal code */
union sigval si_value /* signal value */
si_signo contains the system-generated signal number. For the
waitid(2) function,
si_signo is always
SIGCHLD.
If
si_errno is non-zero, it contains an error number associated with
this signal, as defined in
<errno.h>.
si_code contains a code identifying the cause of the signal.
If the value of the
si_code member is
SI_NOINFO, only the
si_signo member of
siginfo_t is meaningful, and the value of all other members is
unspecified.
User Signals
If the value of
si_code is less than or equal to 0, then the signal was
generated by a user process (see
kill(2),
_lwp_kill(2),
sigqueue(3C),
sigsend(2),
abort(3C), and
raise(3C)) and the
siginfo structure contains
the following additional information:
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
If the signal was generated by a user process, the following values are
defined for
si_code:
SI_USER The implementation sets
si_code to
SI_USER if the signal
was sent by
kill(2),
sigsend(2),
raise(3C) or
abort(3C).
SI_LWP The signal was sent by
_lwp_kill(2).
SI_QUEUE The signal was sent by
sigqueue(3C).
SI_TIMER The signal was generated by the expiration of a timer
created by
timer_settime(3C).
SI_ASYNCIO The signal was generated by the completion of an
asynchronous
I/O request.
SI_MESGQ The signal was generated by the arrival of a message on an
empty message queue. See
mq_notify(3C).
si_value contains the application specified value, which is passed to the
application's signal-catching function at the time of the signal delivery
if
si_code is any of
SI_QUEUE,
SI_TIMER,
SI_ASYNCHIO, or
SI_MESGQ.
System Signals
Non-user generated signals can arise for a number of reasons. For all of
these cases,
si_code contains a positive value reflecting the reason why
the system generated the signal:
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
Signals can also be generated from the resource control subsystem. Where
these signals do not already possess kernel-level
siginfo codes, the
siginfo si_code will be filled with
SI_RCTL to indicate a kernel-
generated signal from an established resource control value.
Signal Code Reason
------------------------------------------------------
SIGXRES SI_RCTL resource-control generated signal
------------------------------------------------------
SIGHUP
SIGTERM
The uncatchable signals
SIGSTOP and
SIGKILL have undefined
siginfo codes.
Signals sent with a
siginfo code of
SI_RCTL contain code-dependent
information for kernel-generated signals:
Code Field Value
--------------------------------------------------------------
SI_RCTL hr_time si_entity process-model entity of control
In addition, the following signal-dependent information is available for
kernel-generated signals:
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 band event for
POLL_IN,
POLL_OUT, or
POLL_MSGSEE ALSO
_lwp_kill(2),
kill(2),
setrctl(2),
sigaction(2),
sigsend(2),
waitid(2),
abort(3C),
aio_read(3C),
mq_notify(3C),
raise(3C),
sigqueue(3C),
timer_create(3C),
timer_settime(3C),
signal.h(3HEAD)NOTES
For
SIGCHLD signals, if
si_code is equal to
CLD_EXITED, then
si_status 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
si_addr might not be available; in
that case,
si_addr is guaranteed to be on the same page as the faulting
instruction or memory reference.
February 5, 2008
SIGINFO.H(3HEAD)