Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
siginfo.h(3HEAD)		    Headers		      siginfo.h(3HEAD)

       siginfo.h, siginfo - signal generation information

       #include	<siginfo.h>

       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
       member  of  siginfo_t is	meaningful, and	the value of all other members
       is unspecified.

   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(3RT), sigsend(2), abort(3C), and raise(3C)) and	 the   siginfo
       structure contains 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  sig-
		       nal  was	 sent  by  kill(2),  sigsend(2),  raise(3C) or

       SI_LWP	       The signal was sent by _lwp_kill(2).

       SI_QUEUE	       The signal was sent by sigqueue(3RT).

       SI_TIMER	       The signal was generated	by the expiration of  a	 timer
		       created by timer_settime(3RT).

       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. See mq_notify(3RT).

       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

   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:

       Signal	      Code		   Reason
       SIGILL	      ILL_ILLOPC	   illegal opcode
		      ILL_ILLOPN	   illegal operand
		      ILL_ILLADR	   illegal addressing mode
		      ILL_ILLTRP	   illegal trap
		      ILL_PRVOPC	   privileged opcode
		      ILL_PRVREG	   privileged register
		      ILL_COPROC	   co-processor	error
		      ILL_BADSTK	   internal stack error
       SIGFPE	      FPE_INTDIV	   integer divide by zero
		      FPE_INTOVF	   integer overflow
		      FPE_FLTDIV	   floating point divide by zero
		      FPE_FLTOVF	   floating point overflow
		      FPE_FLTUND	   floating point underflow
		      FPE_FLTRES	   floating point inexact result
		      FPE_FLTINV	   invalid floating point operation
		      FPE_FLTSUB	   subscript out of range
       SIGSEGV	      SEGV_MAPERR	   address not mapped to object
		      SEGV_ACCERR	   invalid permissions	for  mapped
       SIGBUS	      BUS_ADRALN	   invalid address alignment
		      BUS_ADRERR	   non-existent	physical address
		      BUS_OBJERR	   object specific hardware error
       SIGTRAP	      TRAP_BRKPT	   process breakpoint
		      TRAP_TRACE	   process trace trap
       SIGCHLD	      CLD_EXITED	   child has exited
		      CLD_KILLED	   child was killed
		      CLD_DUMPED	   child terminated abnormally
		      CLD_TRAPPED	   traced child	has trapped
		      CLD_STOPPED	   child has stopped
		      CLD_CONTINUED	   stopped child had continued
       SIGPOLL	      POLL_IN		   data	input available
		      POLL_OUT		   output buffers available
		      POLL_MSG		   input message available
		      POLL_ERR		   I/O error
		      POLL_PRI		   high	priority input available
		      POLL_HUP		   device 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.

	  Signal	    Code		   Reason
       SIGXRES	      SI_RCTL		 resource-control generated

       The  uncatchable	 signals  SIGSTOP  and	SIGKILL	have undefined siginfo

       Signals sent with a siginfo code	of SI_RCTL contain code-dependent  in-
       formation for kernel-generated signals:

	  Code		    Field		       Value
       SI_RCTL	      hr_time si_entity	  process-model	entity of control

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

	  Signal	    Field		       Value
       SIGILL	      caddr_t si_addr	  address of faulting instruction
       SIGSEGV	      caddr_t si_addr	  address of faulting memory  ref-
       SIGCHLD	      pid_t si_pid	  child	process	ID
		      int si_status	  exit value or	signal
       SIGPOLL	      long si_band	  band	  event	   for	  POLL_IN,
					  POLL_OUT, or POLL_MSG

       _lwp_kill(2), kill(2), setrctl(2), sigaction(2),	sigsend(2), waitid(2),
       abort(3C),  aio_read(3RT),  mq_notify(3RT), raise(3C), signal.h(3HEAD),
       sigqueue(3RT), timer_create(3RT), timer_settime(3RT)

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

SunOS 5.10			  19 Jul 2004		      siginfo.h(3HEAD)


Want to link to this manual page? Use this URL:

home | help