svcadm(8)을 검색하려면 섹션에서 8 을 선택하고, 맨 페이지 이름에 svcadm을 입력하고 검색을 누른다.
siginfo.h(3head)
siginfo.h(3HEAD) Headers siginfo.h(3HEAD)
NAME
siginfo.h, siginfo - signal generation information
SYNOPSIS
#include <siginfo.h>
DESCRIPTION
If a process is catching a signal, it might request information that
tells why the system generated that signal. See sigaction(2). If a
process is monitoring its children, it might 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 */
union sigval si_value /* signal value */
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(3HEAD).
si_code contains a code identifying the cause of the signal.
If the value of the si_code member is SI_NOINFO, only the si_signo mem‐
ber of siginfo_t is meaningful, and the value of all other members is
unspecified.
The psiginfo(3C) function produces messages on the standard error out‐
put describing the values contained in a siginfo_t structure.
User Signals
If the value of si_code is less than or equal to 0, then the signal was
generated by a user process (see kill(2), _lwp_kill(2), sigqueue(3C),
sigsend(2), abort(3C), and raise(3C)) and the siginfo structure con‐
tains the following additional information:
pid_t si_pid /* sending process ID */
uid_t si_uid /* sending user ID */
ctid_t si_ctid /* sending contract ID */
zoneid_t si_zoneid /* sending zone ID */
If the signal was generated by a user process, the following values are
defined for si_code:
SI_USER The implementation sets si_code to SI_USER if the signal
was sent by kill(2), sigsend(2), raise(3C), or abort(3C).
SI_LWP The signal was sent by _lwp_kill(2).
SI_QUEUE The signal was sent by sigqueue(3C).
SI_TIMER The signal was generated by the expiration of a timer
created by timer_settime(3C).
SI_ASYNCIO The signal was generated by the completion of an asyn‐
chronous I/O request.
SI_MESGQ The signal was generated by the arrival of a message on
an empty message queue. For more information, see the
mq_notify(3C) man page.
si_value contains the application specified value, which is passed to
the application's signal-catching function at the time of the signal
delivery if si_code is any of SI_QUEUE, SI_TIMER, SI_ASYNCHIO, or
SI_MESGQ.
System Signals
Non-user generated signals can arise for a number of reasons. For all
of these cases, si_code contains a positive value reflecting the reason
why the system generated the signal:
tab(); lw(0.97i) lw(1.29i) lw(3.24i) lw(0.97i) lw(1.29i) lw(3.24i) Sig‐
nalCodeReason _ SIGILLILL_ILLOPCillegal opcode ILL_ILLOPNillegal
operand ILL_ILLADRillegal addressing mode ILL_ILLTRPillegal trap
ILL_PRVOPCprivileged opcode ILL_PRVREGprivileged register ILL_COPROCco-
processor error ILL_BADSTKinternal stack error _ SIGFPEFPE_INTDIVinte‐
ger divide by zero FPE_INTOVFinteger overflow FPE_FLTDIVfloating point
divide by zero FPE_FLTOVFfloating point overflow FPE_FLTUNDfloating
point underflow FPE_FLTRESfloating point inexact result FPE_FLTINVin‐
valid floating point operation FPE_FLTSUBsubscript out of range _
SIGSEGVSEGV_MAPERRaddress not mapped to object SEGV_ACCERRinvalid per‐
missions for mapped object SEGV_ACCADIADI not enabled for mapped object
SEGV_ADIDERRADI mismatch exception disrupting SEGV_ADIPERRADI mismatch
exception precise SEGV_CMIexception in mapped CMI object _ SIGBUS‐
BUS_ADRALNinvalid address alignment BUS_ADRERRnon-existent physical ad‐
dress BUS_OBJERRobject specific hardware error BUS_MEM_UEuser process
uncorrectable memory error _ SIGTRAPTRAP_BRKPTprocess breakpoint
TRAP_TRACEprocess trace trap _ SIGCHLDCLD_EXITEDchild has exited
CLD_KILLEDchild was killed CLD_DUMPEDchild terminated abnormally
CLD_TRAPPEDtraced child has trapped CLD_STOPPEDchild has stopped
CLD_CONTINUEDstopped child had continued _ SIGPOLLPOLL_INdata input
available POLL_OUToutput buffers available POLL_MSGinput message avail‐
able POLL_ERRI/O error POLL_PRIhigh priority input available
POLL_HUPdevice disconnected
Signals can also be generated from the resource control subsystem.
Where these signals do not already possess kernel-level siginfo codes,
the siginfo si_code will be filled with SI_RCTL to indicate a kernel-
generated signal from an established resource control value.
tab(); cw(0.97i) cw(1.29i) cw(3.24i) lw(0.97i) lw(1.29i) lw(3.24i) Sig‐
nalCodeReason _ SIGXRESSI_RCTLresource-control generated signal _
SIGHUP SIGTERM
The uncatchable signals SIGSTOP and SIGKILL have undefined siginfo
codes.
Signals sent with a siginfo code of SI_RCTL contain code-dependent in‐
formation for kernel-generated signals:
tab(); cw(0.97i) cw(1.29i) cw(3.24i) lw(0.97i) lw(1.29i) lw(3.24i)
CodeFieldValue _ SI_RCTLhr_time si_entityprocess-model entity of con‐
trol
In addition, the following signal-dependent information is available
for kernel-generated signals:
tab(); cw(0.97i) cw(1.29i) cw(3.24i) lw(0.97i) lw(1.29i) lw(3.24i) Sig‐
nalFieldValue _ SIGILLcaddr_t si_addraddress of faulting instruction _
SIGFPE _ SIGSEGVcaddr_t si_addraddress of faulting memory reference
SIGBUS _ SIGCHLDpid_t si_pidchild process ID int si_statusexit value or
signal _ SIGPOLLlong si_bandT{ band event for POLL_IN, POLL_OUT, or
POLL_MSG T}
Signals sent with a siginfo code of SEGV_ADIPERR or SEGV_ADIDERR con‐
tain signal-dependent information for kernel-generated SIGSEGV signals:
tab(); cw(0.97i) cw(1.29i) cw(3.24i) lw(0.97i) lw(1.29i) lw(3.24i)
CodeFieldValue _ SEGV_ADIPERRcaddr_t si_addraddress of mismatched mem‐
ory reference caddr_t si_pcT{ address of instruction that executed mis‐
matched memory reference T} int si_adiverscurrent ADI version of
si_addr _ SEGV_ADIDERRcaddr_t si_addrT{ instruction address of first
store where mismatch was detected T} caddr_t si_pc-1 int si_adivers-1
See the adi(7) man page.
Signals sent with a siginfo code of SEGV_CMI contain signal-dependent
information for kernel-generated SIGSEGV signals:
tab(); cw(0.97i) cw(1.29i) cw(3.24i) lw(0.97i) lw(1.29i) lw(3.24i)
CodeFieldValue _ SEGV_CMIint si_trapnoT{ CMI segment id of the mapped
CMI + object that contains si_addr T}
See the Delivering CMI Exceptions section of the cmi(7) man page.
Signals sent with a siginfo code of ILL_BADSTK contain code-dependent
information for kernel-generated signals:
tab(); cw(0.97i) cw(1.29i) cw(3.24i) lw(0.97i) lw(1.29i) lw(3.24i)
CodeFieldValue _ ILL_BADSTKcaddr_t si_addrbad stack pointer caddr_t
si_pcT{ the address that caused the illegal instruction fault T}
SEE ALSO
_lwp_kill(2), adi_version_max(2), kill(2), setrctl(2), sigaction(2),
sigsend(2), waitid(2), abort(3C), aio_read(3C), mq_notify(3C),
psiginfo(3C), raise(3C), sigqueue(3C), timer_create(3C),
timer_settime(3C), signal.h(3HEAD), adi(7), cmi(7)
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 implemen‐
tations, the exact value of si_addr might not be available; in that
case, si_addr is guaranteed to be on the same page as the faulting in‐
struction or memory reference.
For SIGSEGV signals with si_code equal to SEGV_ADIPERR, the value of
si_adivers will be the in-memory version of the mismatched address at
the time that the kernel fetches it during the processing of the trap,
not the version at the time of the trap. If a thread other than the one
that executed the data access and took the trap changes the version be‐
tween the time of the trap and the kernel access, si_adivers will con‐
tain that new value.
For SIGSEGV signals with si_code equal to SEGV_ADIPERR, if the in-mem‐
ory version is lost due to a hardware error which cannot be corrected,
or if the in-memory version is greater than the value returned by the
adi_version_max(2) function, si_adivers will be set to -1.
A SIGSEGV signal with si_code equal to SEGV_ADIPERR results from an ADI
exception that generates a precise trap, while a SIGSEGV signal with
si_code equal to SEGV_ADIDERR results from an ADI exception that gener‐
ates a disrupting trap. When si_code is equal to SEGV_ADIDERR, si_pc is
-1 because the PC (program counter) where the disrupting trap occurred
is not related to the store that caused the trap. si_adivers is -1 be‐
cause the store address that caused the trap is not provided by the
hardware. There is no reliable way for software to determine the ad‐
dress since an unpredictable number of instructions are executed after
the store and before the trap is taken due to the nature of a disrupt‐
ing trap.
Oracle Solaris 11.4 25 Sep 2025 siginfo.h(3HEAD)