siginfo.h(3head) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

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>.


       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 */S



       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(1.24i)   lw(1.74i)   lw(2.53i)   SignalCodeReason   _  SIG‐
       ILLILL_ILLOPCillegal opcode ILL_ILLOPNillegal operand ILL_ILLADRillegal
       addressing  mode  ILL_ILLTRPillegal  trap  ILL_PRVOPCprivileged  opcode
       ILL_PRVREGprivileged register ILL_COPROCco-processor error  ILL_BADSTK‐
       internal   stack   error   _  SIGFPEFPE_INTDIVinteger  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_FLTINVinvalid  floating
       point  operation  FPE_FLTSUBsubscript out of range _ SIGSEGVSEGV_MAPER‐
       Raddress not mapped to object SEGV_ACCERRinvalid permissions for mapped
       object  SEGV_ACCADIADI  not  enabled  for mapped object SEGV_ADIDERRADI
       mismatch exception disrupting SEGV_ADIPERRADI mismatch  exception  pre‐
       cise  SEGV_CMIexception  in mapped CMI object _ SIGBUSBUS_ADRALNinvalid
       address alignment BUS_ADRERRnon-existent physical address BUS_OBJERRob‐
       ject  specific hardware error BUS_MEM_UEuser process uncorrectable mem‐
       ory 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 available POLL_ERRI/O error POLL_PRI‐
       high 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(1.19i) cw(1.65i) cw(2.65i) lw(1.19i) lw(1.65i) lw(2.65i) 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
       information for kernel-generated signals:


       tab(); cw(1.19i) cw(1.65i) cw(2.65i) lw(1.19i) lw(1.65i) lw(2.65i) Code
       FieldValue _ SI_RCTLhr_time si_entityprocess-model entity of control



       In addition, the following signal-dependent  information  is  available
       for kernel-generated signals:


       tab(); cw(1.19i) cw(1.67i) cw(2.64i) lw(1.19i) lw(1.67i) lw(2.64i) 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(1.19i)  cw(1.67i)  cw(2.64i)  lw(1.19i)  lw(1.67i) lw(2.64i)
       CodeFieldValue _ SEGV_ADIPERRcaddr_t si_addraddress of mismatched  mem‐
       ory  reference  _  caddr_t si_pcT{ address of instruction that executed
       mismatched 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



       Signals sent with a siginfo code of SEGV_CMI  contain  signal-dependent
       information for kernel-generated SIGSEGV signals:


       tab();  cw(1.19i)  cw(1.67i)  cw(2.64i)  lw(1.19i)  lw(1.67i) lw(2.64i)
       CodeFieldValue _ SEGV_CMIint si_trapnoT{ CMI segment id of  the  mapped
       CMI + object that contains si_addr 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),  psig‐
       info(3C), raise(3C), sigqueue(3C), timer_create(3C), timer_settime(3C),
       signal.h(3HEAD)

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
       instruction 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
       between the time of the trap and the  kernel  access,  si_adivers  will
       contain 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
       because the store address that caused the trap is not provided  by  the
       hardware.  There  is  no  reliable  way  for  software to determine the
       address since an unpredictable  number  of  instructions  are  executed
       after  the  store  and  before the trap is taken due to the nature of a
       disrupting trap.



Oracle Solaris 11.4               9 Jul 2018                  siginfo.h(3HEAD)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3