SIGINFO(2) | System Calls Manual | 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 X/Open System Interfaces and Headers Issue 5 (“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 System V Release 4 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.

May 25, 2019 | NetBSD 9.3