siginfo(5)                                                          siginfo(5)


NAME
     siginfo - signal generation information

SYNOPSIS
     #include <siginfo.h>

DESCRIPTION
     If a process is catching a signal, it may request information that tells
     why the system generated that signal (see sigaction(2)).  If a process is
     monitoring its children, it may 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 */

     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 si_code is less than or equal to 0, then the signal was
     generated either by a user process or on behalf of a user initiated
     service.  In this case si_code defines which service initiated the
     request and determines what (if any) additional information is included
     in the siginfo structure.  The following are the possible user initiated
     si_code values:

     SI_USER     The signal was generated via kill(2) or sigsend(2).  The
                 siginfo structure contains the following additional
                 information:


                 pid_t si_pid   /* sending process ID */
                 uid_t si_uid   /* sending user ID */

     SI_QUEUE    The signal was generated via sigqueue(3).  The siginfo
                 structure contains the following additional information:


                 pid_t si_pid   /* sending process ID */
                 uid_t si_uid   /* sending user ID */
                 union sigval si_value; /* value sent via sigqueue */

     Otherwise, si_code contains a signal-specific reason why the signal was
     generated, as follows:


     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      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      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

SEE ALSO
     kill(2), sigaction(2), sigqueue(2), sigsend(2), waitid(2), signal(5)

NOTES
     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.


                                                                        Page 3