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_SCE
        Process syscall entry trap

    TRAP_SCX
        Process syscall exit 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, 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 instruction or data and si_trap contains a hardware specific reason.

For SIGTRAP and TRAP_BRKPT, TRAP_TRACE or TRAP_DBREG 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 SIGTRAP and TRAP_SCE or TRAP_SCX the siginfo structure contains the following additional members:

    int si_sysnum;
    int si_retval[2];
    int si_error;
    uint64_t si_args[8];

si_sysnum contains the syscall number, si_retval contains the syscall return value (meaningful for TRAP_SCX only), si_error contains the syscall error value (meaningful for TRAP_SCX only) and si_args[8] contains the syscall arguments,

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, TRAP_LWP, TRAP_SCE and TRAP_SCX signal specific reasons of SIGTRAP are NetBSD extensions.

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

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

The additional parameters with syscall information in TRAP_SCE and TRAP_SCX first appeared in NetBSD 9.