Skip site navigation (1)Skip section navigation (2)

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
SIGINFO(3)             FreeBSD Library Functions Manual             SIGINFO(3)

     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
     int                 si_signo Ta 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

     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_ILLOPC Ta 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
                                         asynchronous 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 Ta 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

     Finally, the following code-specific information is available:

     Code            Member            Value
     SI_QUEUE        si_value Ta 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 signal
     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
                     si_mqd            the ID of the message queue which
                                       generated the signal

     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.

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

     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.

     This manual page was written by David Xu <>.

FreeBSD 11.0-PRERELEASE        December 8, 2005        FreeBSD 11.0-PRERELEASE


Want to link to this manual page? Use this URL:

home | help