SIGINFO(2)

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_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 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` and `TRAP_LWP` 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` and `TRAP_LWP` first appeared in NetBSD 8.

January 14, 2017 | NetBSD 8.3