SIGVEC(2)                                                            SIGVEC(2)


NAME
       sigvec - software signal facilities

SYNOPSIS
       #include <signal.h>

       struct sigvec {
       int  (*sv_handler)();
       int  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 occurrence, the current process context
       is saved, and a new one is built.  A process may specify 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 special 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  sig‐
       nal mask associated with the handler to be invoked.

       Sigvec assigns a handler for a specific signal.  If vec is non-zero, it
       specifies a handler 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 nor‐
       mally 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; signals that interrupt  sys‐
       tem 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 indi‐
       cates 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 con‐
       stant  as  given below or, for compatibility mode faults, the code pro‐
       vided 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

BUGS
       This manual page is still confusing.


4th Berkeley Distribution       January 8, 1986                      SIGVEC(2)
 
Generated: 2016-12-26
Generated by man2html V0.25
page hit count: 979
Valid CSS Valid XHTML 1.0 Strict