SIGINFO(2)

NAME
siginfo - signal information

SYNOPSIS
#include <signal.h>

DESCRIPTION
siginfo is a structure type which contains information about a signal delivered to a process.

siginfo includes the following members:

    int si_signo;
    int si_errno;
    int si_code;

si_signo contains the signal number generated by the system.

If si_errno is non-zero, then it contains a system specific error number associated with this signal. This number is defined in errno(2).

If si_code is less than or equal to zero, the signal was generated by a user process or a user requested service:

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

        pid_t si_pid;
        uid_t si_uid;

    The si_pid field contains the pid of the sending process and the si_uid field contains the user id of the sending process.

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

        pid_t si_pid;
        uid_t si_uid;
        sigval_t si_value;

    The si_pid field contains the pid of the sending process and the si_uid field contains the user id of the sending process. Finally, the si_value field contains the value sent via sigqueue(2).

SI_TIMER
    The signal was generated because a timer set by timer_settime(2) has expired. The siginfo structure contains the following additional members:

        sigval_t si_value;

    The si_value field contains the value set via timer_create(2).

SI_ASYNCIO
    The signal was generated by completion of an asynchronous I/O operation. The siginfo structure contains the following additional members:

        int si_fd;
        long si_band;

    The si_fd argument contains the file descriptor number on which the operation was completed and the si_band field contains the side and priority of the operation. If the operation was a normal read, si_band will contain POLLIN | POLLRDNORM; on an out-of-band read it will contain POLLPRI | POLLRDBAND; on a normal write it will contain POLLOUT | POLLWRNORM; on an out-of-band write it will contain POLLPRI | POLLWRBAND.

SI_MESGQ
    The signal was generated because of the arrival of a message on an empty message queue. See mq_notify(3).

SI_LWP
    The signal was generated via _lwp_kill(2). The siginfo structure contains the following additional members:

        pid_t si_pid;
        uid_t si_uid;

    The si_pid field contains the pid of the sending process and the si_uid field contains the user id of the sending process.

SI_NOINFO
    The signal was generated without specific info available.

If si_code is positive, then it contains a signal specific reason why the signal was generated:

SIGILL

    ILL_BADSTK
        Internal stack error

    ILL_COPROC
        Coprocessor error

    ILL_ILLADR
        Illegal addressing mode

    ILL_ILLOPC
        Illegal opcode

    ILL_ILLOPN
        Illegal operand

    ILL_ILLTRP
        Illegal trap

    ILL_PRVOPC
        Privileged opcode

    ILL_PRVREG
        Privileged register

SIGFPE

    FPE_FLTDIV
        Floating-point divide by zero

    FPE_FLTINV
        Invalid floating-point operation

    FPE_FLTOVF
        Floating-point overflow

    FPE_FLTRES
        Floating-point inexact result

    FPE_FLTUND
        Floating-point underflow

    FPE_FLTSUB
        Subscript out of range

    FPE_INTDIV
        Integer divide by zero

    FPE_INTOVF
        Integer overflow

SIGSEGV

    SEGV_ACCERR
        Invalid permissions for mapped object

    SEGV_MAPERR
        Address not mapped to object

SIGBUS

    BUS_ADRALN
        Invalid address alignment

    BUS_ADRERR
        Nonexistent physical address

    BUS_OBJERR
        Object-specific hardware error

SIGTRAP

    TRAP_BRKPT
        Process breakpoint

    TRAP_CHLD
        Process child trap

    TRAP_DBREG
        Process hardware debug register trap

    TRAP_EXEC
        Process exec trap

    TRAP_LWP
        Process LWP trap

    TRAP_TRACE
        Process trace trap

SIGCHLD

    CLD_CONTINUED
        Stopped child has continued

    CLD_DUMPED
        Child has terminated abnormally and created a core file

    CLD_EXITED
        Child has exited

    CLD_KILLED
        Child has terminated abnormally but did not create a core file

    CLD_STOPPED
        Child has stopped

    CLD_TRAPPED
        Traced child has trapped

SIGIO

    POLL_ERR
        I/O error

    POLL_HUP
        Device disconnected

    POLL_IN
        Data input available

    POLL_MSG
        Input message available

    POLL_OUT
        Output buffers available

    POLL_PRI
        High priority input available

For SIGILL, SIGFPE, and SIGTRAP the siginfo structure contains the following additional members:

    void *si_addr;
    int si_trap;

si_addr contains the address of the faulting instruction and si_trap contains a hardware specific reason.

For SIGBUS and SIGSEGV the siginfo structure contains the following additional members:

    void *si_addr;
    int si_trap;

si_addr contains the address of the faulting data and si_trap contains a hardware specific reason.

For some architectures the value of si_addr may be inaccurate.

For SIGIO the siginfo structure contains the following additional members:

    int si_fd;
    long si_band;

The si_fd argument contains the file descriptor number on which the operation was completed and the si_band field contains the side and priority of the operation as described above.

Finally, for SIGCHLD the siginfo structure contains the following additional members:

    pid_t si_pid;
    uid_t si_uid;
    int si_status;
    clock_t	si_utime;
    clock_t	si_stime;

The si_pid field contains the pid of the process who's status changed, the si_uid field contains the user id of the that process, the si_status field contains either the exit code of the process (for CLD_EXITED), or the signal number received by the process. waitid(2), waitpid(2), and the si_utime and si_stime fields contain the user and system process accounting time.

STANDARDS
The siginfo type conforms to xsh5.

Signals specifying SI_LWP or SI_NOINFO are NetBSD extensions.

The TRAP_CHLD, TRAP_DBREG, TRAP_EXEC and TRAP_LWP signal specific reasons of SIGTRAP are NetBSD extensions.

HISTORY
The siginfo functionality first appeared in AT&T UNIX.

TRAP_CHLD, TRAP_DBREG, TRAP_EXEC and TRAP_LWP first appeared in NetBSD 8.