Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sigvec(3) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

fcntl(2)

fork(2)

getrlimit(2)

ioctl(2)

kill(2)

ptrace(2)

read(2)

signal(2)

umask(2)

wait(2)

write(2)

sigblock(3)

sigpause(3)

sigsetmask(3)

sigstack(3)

wait3(3)

getitimer(3C)

setjmp(3C)

setjmp(3C-ucb)

signal(3-ucb)

signal(5)

streamio(7)

termio(7)

sigvec(3)               (BSD Compatibility Package)               sigvec(3)

NAME
     sigvec - software signal facilities

SYNOPSIS
     /usr/ucb/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 pro-
     cess. Signal delivery resembles the occurrence of a hardware inter-
     rupt: the signal is blocked from further occurrence, the current pro-
     cess 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 or sigsetmask 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 using the logical
     OR in the signal mask associated with the handler to be invoked.




Page 1                       Reliant UNIX 5.44                Printed 11/98

sigvec(3)               (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, 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.


























Page 2                       Reliant UNIX 5.44                Printed 11/98

sigvec(3)               (BSD Compatibility Package)               sigvec(3)

     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(3C) 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
     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)]
     S GVTALRM       Virtual time alarm [see setitimer(3C)]
     SIGPROF         Profiling timer alarm [see setitimer(3C)]
     SIGWINCH    -   Window changed [see termio(7)]
     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 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 avail-
     able in BSD 4.2, hence it should not be used if backward compatibility
     is needed.






Page 3                       Reliant UNIX 5.44                Printed 11/98

sigvec(3)               (BSD Compatibility Package)               sigvec(3)

     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.

     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 BSD
     4.2, hence it should not be used if backward compatibility is needed.
     The affected system calls are read or write on a slow device (such as
     a terminal or pipe or other socket, but not a file) and during a wait.

     After a fork or vfork the child inherits all signals, the signal mask,
     the signal stack, and the restart/interrupt and reset-signal-handler
     flags.

     The execve 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 sys-
     tem calls continue to do so.

     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 indi-
     cates that an error occurred and errno is set to indicate the reason.

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









Page 4                       Reliant UNIX 5.44                Printed 11/98

sigvec(3)               (BSD Compatibility Package)               sigvec(3)

NOTES
     SIGPOLL is a synonym for SIGIO. A SIGIO will be issued when a file
     descriptor corresponding to a STREAMS [see introprm2(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(7)]. Otherwise, the process will never receive SIGPOLL.

     The handler routine can be declared like this:

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

     In this example:

     sig    Signal number.

     code   Parameter of certain signals that provides additional detail.

     scp    Pointer to the sigcontext structure (defined in signal.h), used
            to restore the context from before the signal and addr is addi-
            tional address information.

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

SEE ALSO
     exec(2), fcntl(2), fork(2), getrlimit(2), ioctl(2), kill(2),
     ptrace(2), read(2), signal(2), umask(2), wait(2), write(2),
     sigblock(3), sigpause(3), sigsetmask(3), sigstack(3), wait3(3),
     getitimer(3C), setjmp(3C), setjmp(3C-ucb), signal(3-ucb), signal(5),
     streamio(7), termio(7).





















Page 5                       Reliant UNIX 5.44                Printed 11/98

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