Unix/Linux Go Back    


BSD 2.11 - man page for sigvec (bsd section 2)

Linux & Unix Commands - Search Man Pages
Man Page or Keyword Search:   man
Select Man Page Set:       apropos Keyword Search (sections above)


SIGVEC(2)										SIGVEC(2)

NAME
       sigvec - software signal facilities

SYNOPSIS
       #include <signal.h>

       struct sigvec {
       int  (*sv_handler)();
       long sv_mask;
       int  sv_flags;
       };

       sigvec(sig, vec, ovec)
       int sig;
       struct sigvec *vec, *ovec;

DESCRIPTION
       The  system  defines a set of signals that may be delivered to a process.  Signal delivery
       resembles the occurence of a hardware interrupt: the signal is blocked from further occur-
       rence,  the current process context is saved, and a new one is built.  A process may spec-
       ify a handler to which a signal is delivered, or specify that a signal is to be blocked or
       ignored.   A  process  may also specify that a default action is to be taken by the system
       when a signal occurs.  Normally, signal handlers execute  on  the  current  stack  of  the
       process.  This may be changed, on a per-handler basis, so that signals are taken on a spe-
       cial signal stack.

       All signals have the same priority.  Signal routines execute with the signal  that  caused
       their  invocation  blocked, but other signals may yet occur.  A global signal mask defines
       the set of signals currently blocked from delivery to a process.  The signal  mask  for	a
       process	is  initialized  from  that of its parent (normally 0).  It may be changed with a
       sigblock(2) or sigsetmask(2) call, or when a signal is delivered to the process.

       When a signal condition arises for a process, the signal is added  to  a  set  of  signals
       pending for the process.  If the signal is not currently blocked by the process then it is
       delivered to the process.  When a signal is delivered, the current state of the process is
       saved,  a  new  signal  mask is calculated (as described below), and the signal handler is
       invoked.  The call to the handler is arranged so  that  if  the	signal	handling  routine
       returns normally the process will resume execution in the context from before the signal's
       delivery.  If the process wishes to resume in a different context, then it must arrange to
       restore the previous context itself.

       When a signal is delivered to a process a new signal mask is installed for the duration of
       the process' signal handler (or until a sigblock or sigsetmask call is made).   This  mask
       is formed by taking the current signal mask, adding the signal to be delivered, and or'ing
       in the signal mask associated with the handler to be invoked.

       Sigvec assigns a handler for a specific signal.	If vec is non-zero, it specifies  a  han-
       dler  routine  and  mask to be used when delivering the specified signal.  Further, if the
       SV_ONSTACK bit is set in sv_flags, the system will deliver the signal to the process on	a
       signal  stack,  specified  with	sigstack(2).   If ovec is non-zero, the previous handling
       information for the signal is returned to the user.

       The following is a list of all signals with names as in the include file <signal.h>:

       SIGHUP	 1    hangup
       SIGINT	 2    interrupt
       SIGQUIT	 3*   quit
       SIGILL	 4*   illegal instruction
       SIGTRAP	 5*   trace trap
       SIGIOT	 6*   IOT instruction
       SIGEMT	 7*   EMT instruction
       SIGFPE	 8*   floating point exception
       SIGKILL	 9    kill (cannot be caught, blocked, or ignored)
       SIGBUS	 10*  bus error
       SIGSEGV	 11*  segmentation violation
       SIGSYS	 12*  bad argument to system call
       SIGPIPE	 13   write on a pipe with no one to read it
       SIGALRM	 14   alarm clock
       SIGTERM	 15   software termination signal
       SIGURG	 16@  urgent condition present on socket
       SIGSTOP	 17|+'stop (cannot be caught, blocked, or ignored)
       SIGTSTP	 18|+'stop signal generated from keyboard
       SIGCONT	 19@  continue after stop (cannot be blocked)
       SIGCHLD	 20@  child status has changed
       SIGTTIN	 21|+'background read attempted from control terminal
       SIGTTOU	 22|+'background write attempted to control terminal
       SIGIO	 23@  i/o is possible on a descriptor (see fcntl(2))
       SIGXCPU	 24   cpu time limit exceeded (see setrlimit(2))
       SIGXFSZ	 25   file size limit exceeded (see setrlimit(2))
       SIGVTALRM 26   virtual time alarm (see setitimer(2))
       SIGPROF	 27   profiling timer alarm (see setitimer(2))
       SIGWINCH  28@  window size change
       SIGUSR1	 30   user defined signal 1
       SIGUSR2	 31   user defined signal 2

       The starred signals in the list above cause a core image if not caught or ignored.

       Once a signal handler is installed, it remains installed  until	another  sigvec  call  is
       made,  or an execve(2) is performed.  The default action for a signal may be reinstated by
       setting sv_handler to SIG_DFL; this default is termination (with a core image for  starred
       signals)  except for signals marked with @ or |+'.  Signals marked with @ are discarded if
       the action is SIG_DFL; signals marked with |+' cause the process to stop.   If  sv_handler
       is  SIG_IGN  the  signal  is subsequently ignored, and pending instances of the signal are
       discarded.

       If a caught signal occurs during certain system calls, the  call  is  normally  restarted.
       The  call can be forced to terminate prematurely with an EINTR error return by setting the
       SV_INTERRUPT bit in sv_flags.  The affected system calls are read(2) or write(2) on a slow
       device (such as a terminal; but not a file) and during a wait(2).

       After  a  fork(2)  or vfork(2) the child inherits all signals, the signal mask, the signal
       stack, and the restart/interrupt flags.

       Execve(2) resets all caught signals to default action and resets all signals to be  caught
       on the user stack.  Ignored signals remain ignored; the signal mask remains the same; sig-
       nals that interrupt system calls continue to do so.

NOTES
       The mask specified in vec is not allowed to block SIGKILL, SIGSTOP, or SIGCONT.	 This  is
       done silently by the system.

       The  SV_INTERRUPT flag is not available in 4.2BSD, hence it should not be used if backward
       compatibility is needed.

RETURN VALUE
       A 0 value indicated that the call  succeeded.   A  -1  return  value  indicates	an  error
       occurred and errno is set to indicated the reason.

ERRORS
       Sigvec  will  fail  and	no  new  signal handler will be installed if one of the following
       occurs:

       [EFAULT]       Either vec or ovec points to memory that is not a valid part of the process
		      address space.

       [EINVAL]       Sig is not a valid signal number.

       [EINVAL]       An attempt is made to ignore or supply a handler for SIGKILL or SIGSTOP.

       [EINVAL]       An attempt is made to ignore SIGCONT (by default SIGCONT is ignored).

SEE ALSO
       kill(1),   ptrace(2),   kill(2),  sigblock(2),  sigsetmask(2),  sigpause(2),  sigstack(2),
       sigvec(2), setjmp(3), siginterrupt(3), tty(4)

NOTES  (VAX-11)
       The handler routine can be declared:

	   handler(sig, code, scp)
	   int sig, code;
	   struct sigcontext *scp;

       Here sig is the signal number, into which the hardware faults  and  traps  are  mapped  as
       defined	below.	Code is a parameter that is either a constant as given below or, for com-
       patibility mode faults, the code provided by the hardware (Compatibility mode  faults  are
       distinguished  from  the  other	SIGILL	traps by having PSL_CM set in the psl).  Scp is a
       pointer to the sigcontext structure (defined in <signal.h>), used to restore  the  context
       from before the signal.

       The  following  defines	the mapping of hardware traps to signals and codes.  All of these
       symbols are defined in <signal.h>:

	  Hardware condition		      Signal	   Code

       Arithmetic traps:
	  Integer overflow		      SIGFPE	   FPE_INTOVF_TRAP
	  Integer division by zero	      SIGFPE	   FPE_INTDIV_TRAP
	  Floating overflow trap	      SIGFPE	   FPE_FLTOVF_TRAP
	  Floating/decimal division by zero   SIGFPE	   FPE_FLTDIV_TRAP
	  Floating underflow trap	      SIGFPE	   FPE_FLTUND_TRAP
	  Decimal overflow trap 	      SIGFPE	   FPE_DECOVF_TRAP
	  Subscript-range		      SIGFPE	   FPE_SUBRNG_TRAP
	  Floating overflow fault	      SIGFPE	   FPE_FLTOVF_FAULT
	  Floating divide by zero fault       SIGFPE	   FPE_FLTDIV_FAULT
	  Floating underflow fault	      SIGFPE	   FPE_FLTUND_FAULT
       Length access control		      SIGSEGV
       Protection violation		      SIGBUS
       Reserved instruction		      SIGILL	   ILL_RESAD_FAULT
       Customer-reserved instr. 	      SIGEMT
       Reserved operand 		      SIGILL	   ILL_PRIVIN_FAULT
       Reserved addressing		      SIGILL	   ILL_RESOP_FAULT
       Trace pending			      SIGTRAP
       Bpt instruction			      SIGTRAP
       Compatibility-mode		      SIGILL	   hardware supplied code
       Chme				      SIGSEGV
       Chms				      SIGSEGV
       Chmu				      SIGSEGV

NOTES  (PDP-11)
       The handler routine can be declared:

	   handler(sig, code, scp)
	   int sig, code;
	   struct sigcontext *scp;

       Here sig is the signal number, into which the hardware faults  and  traps  are  mapped  as
       defined	below.	 Code is a parameter that is a constant as given below.  Scp is a pointer
       to the sigcontext structure (defined in <signal.h>), used  to  restore  the  context  from
       before the signal.

       The  following  defines	the mapping of hardware traps to signals and codes.  All of these
       symbols are defined in <signal.h>:

	  Hardware condition		      Signal	   Code

       Arithmetic traps:
	  Floating overflow trap	      SIGFPE	   FPE_FLTOVF_TRAP
	  Floating/decimal division by zero   SIGFPE	   FPE_FLTDIV_TRAP
	  Floating underflow trap	      SIGFPE	   FPE_FLTUND_TRAP
	  Decimal overflow trap 	      SIGFPE	   FPE_DECOVF_TRAP
	  Illegal return code		      SIGFPE	   FPE_CRAZY
	  Bad op code			      SIGFPE	   FPE_OPCODE_TRAP
	  Bad operand			      SIGFPE	   FPE_OPERAND_TRAP
	  Maintenance trap		      SIGFPE	   FPE_MAINT_TRAP
       Length access control		      SIGSEGV
       Protection violation (odd address)     SIGBUS
       Reserved instruction		      SIGILL	   ILL_RESAD_FAULT
       Customer-reserved instr. 	      SIGEMT
       Trace pending			      SIGTRAP
       Bpt instruction			      SIGTRAP

       The handler routine must save any registers it uses and restore them before returning.  On
       the  PDP-11, the kernel saves r0 and r1 before calling the handler routine, but expect the
       handler to save any other registers it uses.  The standard entry code generated by  the	C
       compiler  for handler routines written in C automatically saves the remaining general reg-
       isters, but floating point registers are not saved.  As a result  there	is  currently  no
       [standard]  method for a handler routine written in C to perform floating point operations
       without blowing the interrupted program out of the water.

BUGS
       This manual page is still confusing.

4th Berkeley Distribution		 January 8, 1986				SIGVEC(2)
Unix & Linux Commands & Man Pages : ©2000 - 2018 Unix and Linux Forums


All times are GMT -4. The time now is 10:28 PM.