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.
typedef long pid_t si_pid /* sending process ID */ typedef long uid_t si_uid /* sending user ID */
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(3R) .
- SI_TIMER
- the signal was generated by the expiration of a timer created by timer_settime(3R) .
- 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(3R) ).
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.
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
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
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 may not be available; in that case, si_addr is guaranteed to be on the same page as the faulting instruction or memory reference.