Name | Synopsis | Description | See Also | Notes
#include <siginfo.h>
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.
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(3RT), 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:
The implementation sets si_code to SI_USER if the signal was sent by kill(2), sigsend(2), raise(3C) or abort(3C).
The signal was sent by _lwp_kill(2).
The signal was sent by sigqueue(3RT).
The signal was generated by the expiration of a timer created by timer_settime(3RT).
The signal was generated by the completion of an asynchronous I/O request.
The signal was generated by the arrival of a message on an empty message queue. See mq_notify(3RT).
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.
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_MSG |
_lwp_kill(2), kill(2), setrctl(2), sigaction(2), sigsend(2), waitid(2), abort(3C), aio_read(3RT), mq_notify(3RT), raise(3C), signal.h(3HEAD), sigqueue(3RT), timer_create(3RT), timer_settime(3RT)
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.
Name | Synopsis | Description | See Also | Notes