SIGINFO(3) BSD Library Functions Manual SIGINFO(3)NAMEsiginfo — signal generation information
SYNOPSIS
#include <signal.h>
DESCRIPTION
A process may request signal information when it is catching a signal.
The information specifies why the system generated that signal. To
request signal information in a signal handler, the user can set
SA_SIGINFO in sa_flags before sigaction(2) is called, otherwise the user
can use sigwaitinfo(2) and sigtimedwait(2) to get signal information. In
either case, the system returns the information in a structure of type
siginfo_t, which includes the following information:
Type Member Description
int si_signo signal number
int si_errno error number
int si_code signal code
union sigval si_value signal value
pid_t si_pid sending process ID
uid_t si_uid sending process's real user ID
void *si_addr address of faulting instruction
int si_status exit value or signal
long si_band band event for SIGPOLL
int si_trapno machine trap code
int si_timerid POSIX timer ID
int si_overrun POSIX timer overrun count
int si_mqd POSIX message queue ID
The si_signo member contains the signal number.
The si_errno member contains an error number defined in the file
<errno.h>.
The si_code member contains a code which describes the cause of the sig‐
nal. The macros specified in the Code column of the following table are
defined for use as values of si_code that are signal-specific or non-sig‐
nal-specific reasons why the signal was generated:
Signal Code Reason
SIGILL ILL_ILLOPC illegal opcode
ILL_ILLOPN illegal operand
ILL_ILLADR illegal addressing mode
ILL_ILLTRP illegal trap
ILL_PRVOPC illegal privileged opcode
ILL_PRVREG illegal privileged register
ILL_COPROC coprocessor 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 nonexistent 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 has terminated abnormally and did not
create a core file
CLD_DUMPED child has terminated abnormally and created a
core file
CLD_TRAPPED traced child has trapped
CLD_STOPPED child has stopped
CLD_CONTINUED stopped child has 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
Any SI_NOINFO Only the si_signo member is meaningful; the
value of all other members is unspecified.
SI_USER signal sent by kill(2)
SI_QUEUE signal sent by sigqueue(2)
SI_TIMER signal generated by expiration of a timer set
by timer_settime(2)
SI_ASYNCIO signal generated by completion of an asyn‐
chronous I/O request
SI_MESGQ signal generated by arrival of a message on
an empty message queue
In addition, the following signal-specific information is available:
Signal Member Value
SIGILL si_addr address of faulting instruction
si_trapno machine dependent of trap code
SIGFPE si_addr address of faulting instruction
si_trapno machine dependent of trap code
SIGSEGV si_addr address of faulting memory reference
si_trapno machine dependent of trap code
SIGBUS si_addr address of faulting instruction
si_trapno machine dependent of trap code
SIGCHLD si_pid child process ID
si_status exit value or signal; if si_code is equal to
CLD_EXITED, then it is equal to the exit
value of the child process, otherwise, it is
equal to a signal that caused the child
process to change state.
si_uid real user ID of the process that sent the
signal
SIGPOLL si_band band event for POLL_IN, POLL_OUT, or POLL_MSG
Finally, the following code-specific information is available:
Code Member Value
SI_QUEUE si_value the value passed to sigqueue(2) system call
si_pid the process ID that sent the signal
si_uid real user ID of the process that sent the sig‐
nal
SI_TIMER si_value the value passed to timer_create(2) system call
si_timerid the timer ID returned by timer_create(2) system
call
si_overrun timer overrun count corresponding to the signal
si_errno If timer overrun will be {DELAYTIMER_MAX}, an
error code defined in <errno.h> is set
SI_ASYNCIO si_value the value passed to aio system calls
SI_MESGQ si_value the value passed to mq_notify(2) system call
si_mqd the ID of the message queue which generated the
signal
NOTES
Currently, the kernel never generates the SIGPOLL signal. Also, the
kill(2) system call does not queue signals, so you will not get code
SI_USER. SIGCHLD signal is queued when a process changed its status or
exited. POSIX Realtime Extensions like aio, timer, and message queue
also queue signals. For some hardware architectures, the exact value of
si_addr might not be available.
SEE ALSOaio_read(2), kill(2), mq_notify(2), sigaction(2), sigqueue(2),
sigwaitinfo(2), timer_create(2), timer_settime(2), waitpid(2)STANDARDS
The siginfo_t type conforms to IEEE Std 1003.1-2004 (“POSIX.1”).
HISTORY
Full support for POSIX signal information first appeared in FreeBSD 7.0.
AUTHORS
This manual page was written by David Xu ⟨davidxu@FreeBSD.org⟩.
BSD December 8, 2005 BSD