tail head cat sleep
QR code linking to this page

Manual Pages  — SIGINFO


siginfo – signal generation information



#include <signal.h>


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

si_signosignal number

si_errnoerror number

si_codesignal code

union sigval
si_valuesignal value

si_pidsending process ID

si_uidsending process's real user ID

*si_addraddress of faulting instruction

si_statusexit value or signal

si_bandband event for SIGPOLL

si_trapnomachine trap code

si_timerid POSIX timer ID

si_overrun POSIX timer overrun count

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 signal. 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-signal-specific reasons why the signal was generated:
Signal Code Reason
SIGILL ILL_ILLOPCillegal opcode
ILL_ILLOPNillegal operand
ILL_ILLADRillegal addressing mode
ILL_ILLTRPillegal trap
ILL_PRVOPCillegal privileged opcode
ILL_PRVREGillegal privileged register
ILL_COPROCcoprocessor error
ILL_BADSTKinternal stack error
SIGFPE FPE_INTDIVinteger divide by zero
FPE_INTOVFinteger overflow
FPE_FLTDIVfloating-point divide by zero
FPE_FLTOVFfloating-point overflow
FPE_FLTUNDfloating-point underflow
FPE_FLTRESfloating-point inexact result
FPE_FLTINVinvalid floating-point operation
FPE_FLTSUBsubscript out of range
SIGSEGV SEGV_MAPERRaddress not mapped to object
SEGV_ACCERRinvalid permissions for mapped object
SIGBUS BUS_ADRALNinvalid address alignment
BUS_ADRERRnonexistent physical address
BUS_OBJERRobject-specific hardware error
BUS_OOMERRcannot alloc a page to map at fault
SIGTRAP TRAP_BRKPTprocess breakpoint
TRAP_TRACEprocess trace trap
TRAP_DTRACEDTrace induced trap
TRAP_CAPcapabilities protective trap
SIGCHLD CLD_EXITEDchild has exited
CLD_KILLEDchild has terminated abnormally and did not create a core file
CLD_DUMPEDchild has terminated abnormally and created a core file
CLD_TRAPPEDtraced child has trapped
CLD_STOPPEDchild has stopped
CLD_CONTINUEDstopped child has continued
SIGPOLL POLL_INdata input available
POLL_OUToutput buffers available
POLL_MSGinput message available
POLL_PRIhigh priority input available
POLL_HUPdevice disconnected

SI_NOINFOOnly the si_signo member is meaningful; the value of all other members is unspecified.
SI_USERsignal sent by kill(2)
SI_QUEUEsignal sent by sigqueue(2)
SI_TIMERsignal generated by expiration of a timer set by timer_settime(2)
SI_ASYNCIOsignal generated by completion of an asynchronous I/O request
SI_MESGQsignal generated by arrival of a message on an empty message queue
SI_KERNELsignal generated by miscellaneous parts of the kernel
SI_LWPsignal sent by pthread_kill(3)

In addition, the following signal-specific information is available:
Signal Member Value
SIGILL si_addraddress of faulting instruction
si_trapnomachine dependent of trap code
SIGFPE si_addraddress of faulting instruction
si_trapnomachine dependent of trap code
SIGSEGV si_addraddress of faulting memory reference
si_trapnomachine dependent of trap code
SIGBUS si_addraddress of faulting instruction
si_trapnomachine dependent of trap code
SIGCHLD si_pidchild process ID
si_statusexit 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_USER si_pidthe process ID that sent the signal
si_uidreal user ID of the process that sent the signal
SI_QUEUE si_valuethe value passed to sigqueue(2) system call
si_pidthe process ID that sent the signal
si_uidreal user ID of the process that sent the signal
SI_TIMER si_valuethe value passed to timer_create(2) system call
si_timeridthe timer ID returned by timer_create(2) system call
si_overruntimer overrun count corresponding to the signal
si_errnoIf timer overrun will be { DELAYTIMER_MAX}, an error code defined in <errno.h> is set
SI_ASYNCIO si_valuethe value passed to aio system calls
SI_MESGQ si_valuethe value passed to mq_notify(2) system call
si_mqdthe ID of the message queue which generated the signal
SI_LWP si_pidthe process ID that sent the signal
si_uidreal user ID of the process that sent the signal


Currently, the kernel never generates the SIGPOLL signal. SIGCHLD signal is queued when a process changed its status or exited. POSIX Realtime Extensions like aio, timer, and message queue also queue signals. Signals with code SI_USER, SI_KERNEL or SI_LWP are only queued if there are sufficient resources; otherwise, SI_NOINFO results. For some hardware architectures, the exact value of si_addr might not be available.


aio_read(2), kill(2), mq_notify(2), sigaction(2), sigqueue(2), sigwaitinfo(2), timer_create(2), timer_settime(2), waitpid(2), pthread_kill(3)


The siginfo_t type conforms to IEEE Std 1003.1-2004 ("POSIX.1").


Full support for POSIX signal information first appeared in FreeBSD 7.0 . The codes SI_USER and SI_KERNEL can be generated as of FreeBSD 8.1 . The code SI_LWP can be generated as of FreeBSD 9.0 .


This manual page was written by David Xu <Mt davidxu@FreeBSD.org>.

SIGINFO (3) May 8, 2020

tail head cat sleep
QR code linking to this page

Please direct any comments about this manual page service to Ben Bullock. Privacy policy.

If you have any trouble sounding condescending, find a Unix user to show you how it's done.
— Scott Adams