Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigvec(3) — Dell System V Release 4 Issue 2.2

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

signal(3)

sigpause(3)

sigsetmask(3)

wait(3)

exec(2)

fcntl(2)

fork(2)

getrlimit(2)

getitimer(2)

ioctl(2)

kill(2)

ptrace(2)

read(2)

sigblock(2)

signal(2)

sigstack(2)

umask(2)

wait(2)

write(2)

setjmp(3)

streamio(7)

termio(7)



sigvec(3)          UNIX System V(BSD Compatibility Package)           sigvec(3)


NAME
      sigvec - software signal facilities

SYNOPSIS
      cc [ flag. . . ] file . . . -lucb

      #include <signal.h>

      int 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 occurrence 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 to be 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(3) or sigsetmask(3) call, or when a signal is delivered to the
      process.

      A process may also specify a set of flags for a signal that affect the
      delivery of that signal.

      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 ORing in the signal
      mask associated with the handler to be invoked.




10/89                                                                    Page 1







sigvec(3)          UNIX System V(BSD Compatibility Package)           sigvec(3)


      The action to be taken when the signal is delivered is specified by a
      sigvec structure, which includes the following members:

      void    (*svhandler)();      /* signal handler */
      int     svmask;              /* signal mask to apply */
      int     svflags;             /* see signal options */

      #define SVONSTACK    /* take signal on signal stack */
      #define SVINTERRUPT  /* do not restart system on signal return */
      #define SVRESETHAND  /* reset handler to SIGDFL when signal taken */

      If the SVONSTACK bit is set in the flags for that signal, the system
      will deliver the signal to the process on the signal stack specified with
      sigstack(2), rather than delivering the signal on the current stack.

      If vec is not a NULL pointer, sigvec assigns the handler specified by
      svhandler, the mask specified by svmask, and the flags specified by
      svflags to the specified signal.  If vec is a NULL pointer, sigvec does
      not change the handler, mask, or flags for the specified signal.

      The mask specified in vec is not allowed to block SIGKILL, SIGSTOP, or
      SIGCONT.  The system enforces this restriction silently.

      If ovec is not a NULL pointer, the handler, mask, and flags in effect for
      the signal before the call to sigvec are returned to the user.  A call to
      sigvec with vec a NULL pointer and ovec not a NULL pointer can be used to
      determine the handling information currently in effect for a signal
      without changing that information.

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

            SIGHUP         hangup
            SIGINT         interrupt
            SIGQUIT   *    quit
            SIGILL    *    illegal instruction
            SIGTRAP   *    trace trap
            SIGABRT   *    abort (generated by abort(3) routine)
            SIGEMT    *    emulator trap
            SIGFPE    *    arithmetic exception
            SIGKILL        kill (cannot be caught, blocked, or ignored)
            SIGBUS    *    bus error
            SIGSEGV   *    segmentation violation
            SIGSYS    *    bad argument to system call
            SIGPIPE        write on a pipe or other socket with no one to read it
            SIGALRM        alarm clock
            SIGTERM        software termination signal
            SIGURG    @    urgent condition present on socket
            SIGSTOP   †    stop (cannot be caught, blocked, or ignored)
            SIGTSTP   †    stop signal generated from keyboard
            SIGCONT   @    continue after stop (cannot be blocked)
            SIGCHLD   @    child status has changed


Page 2                                                                    10/89







sigvec(3)          UNIX System V(BSD Compatibility Package)           sigvec(3)


            SIGTTIN   †    background read attempted from control terminal
            SIGTTOU   †    background write attempted to control terminal
            SIGIO     @    I/O is possible on a descriptor [see fcntl(2)]
            SIGXCPU        cpu time limit exceeded [see setrlimit(2)]
            SIGXFSZ        file size limit exceeded [see setrlimit(2)]
            SIGVTALRM      virtual time alarm [see setitimer(2)]
            SIGPROF        profiling timer alarm [see setitimer(2)]
            SIGWINCH  @    window changed [see termio(4)]
            SIGUSR1        user-defined signal 1
            SIGUSR2        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, unless the
      SVRESETHAND bit is set in the flags for that signal.  In that case, the
      value of the handler for the caught signal will be set to SIGDFL before
      entering the signal-catching function, unless the signal is SIGILL,
      SIGPWR, or SIGTRAP.  Also, if this bit is set, the bit for that signal in
      the signal mask will not be set; unless the signal mask associated with
      that signal blocks that signal, further occurrences of that signal will
      not be blocked.  The SVRESETHAND flag is not available in 4.2BSD, hence
      it should not be used if backward compatibility is needed.

      The default action for a signal may be reinstated by setting the signal's
      handler to SIGDFL; this default is termination except for signals marked
      with @ or †.  Signals marked with @ are discarded if the action is
      SIGDFL; signals marked with † cause the process to stop.  If the process
      is terminated, a ``core image'' will be made in the current working
      directory of the receiving process if the signal is one for which an
      asterisk appears in the above list [see core(4)].

      If the handler for that signal is SIGIGN, 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 SVINTERRUPT bit in the flags for
      that signal.  The SVINTERRUPT flag is not available in 4.2BSD, hence it
      should not be used if backward compatibility is needed.  The affected
      system calls are read(2) or write(2) on a slow device (such as a terminal
      or pipe or other socket, 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 and reset-signal-
      handler flags.

      The execve(2) call 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 system
      calls continue to do so.


10/89                                                                    Page 3







sigvec(3)          UNIX System V(BSD Compatibility Package)           sigvec(3)


      The accuracy of addr is machine dependent.  For example, certain machines
      may supply an address that is on the same page as the address that caused
      the fault.  If an appropriate addr cannot be computed it will be set to
      SIGNOADDR.

RETURN VALUE
      A 0 value indicates that the call succeeded.  A -1 return value indicates
      that an error occurred and errno is set to indicate 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 is not a NULL pointer and points to
                     memory that is not a valid part of the process address
                     space.

      EINVAL         Sig is not a valid signal number, or, SIGKILL, or SIGSTOP.

SEE ALSO
      signal(3), sigpause(3), sigsetmask(3), wait(3)

      exec(2), fcntl(2), fork(2), getrlimit(2), getitimer(2), ioctl(2),
      kill(2), ptrace(2), read(2), sigblock(2), signal(2), sigstack(2),
      umask(2), wait(2), write(2), setjmp(3) in the Programmer's Reference
      Manual

      streamio(7), termio(7) in the System Administrator's Reference Manual

NOTES
      SIGPOLL is a synonym for SIGIO.  A SIGIO will be issued when a file
      descriptor corresponding to a STREAMS [see intro(2)] file has a
      ``selectable'' event pending.  Unless that descriptor has been put into
      asynchronous mode [see fcntl(2)], a process must specifically request
      that this signal be sent using the ISETSIG ioctl call [see streamio(4)].
      Otherwise, the process will never receive SIGPOLL.

      The handler routine can be declared:

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

      Here sig is the signal number; code is a parameter of certain signals
      that provides additional detail; scp is a pointer to the sigcontext
      structure (defined in signal.h), used to restore the context from before
      the signal; and addr is additional address information.

      The signals SIGKILL, SIGSTOP, and SIGCONT cannot be ignored.




Page 4                                                                    10/89





Typewritten Software • bear@typewritten.org • Edmonds, WA 98026