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.
Page 1 (last mod. 1/15/87)
sigvec(2) sigvec(2)
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 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.
Page 2 (last mod. 1/15/87)
sigvec(2) sigvec(2)
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;
signals 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 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.
Page 3 (last mod. 1/15/87)
sigvec(2) sigvec(2)
[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), tty(4).
Page 4 (last mod. 1/15/87)