SunOS/BSD Compatibility Library Functions sigvec(3UCB)
NAME
sigvec - software signal facilities
SYNOPSIS
/usr/ucb/cc [ flag ... ] file...
#include
int sigvec(sig, nvec, ovec)
int sig;
struct sigvec *nvec, *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() 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 con-
text itself.
SunOS 5.11 Last change: 30 Oct 2007 1
SunOS/BSD Compatibility Library Functions sigvec(3UCB)
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 associ-
ated with the handler to be invoked.
The action to be taken when the signal is delivered is
specified by a sigvec() structure, which includes the fol-
lowing members:
void (*svhandler)(); /* signal handler */
int svmask; /* signal mask to apply */
int svflags; /* see signal options */
#define SVONSTACK /* take signal on signal stack */
#define SVINTERUPT /* 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(3UCB) rather than
delivering the signal on the current stack.
If nvec is not a NUL pointer, sigvec() assigns the handler
specified by svhandler(), the mask specified by svmask(),
and the flags specified by svflags() to the specified sig-
nal. If nvec is a NUL pointer, sigvec() does not change
the handler, mask, or flags for the specified signal.
The mask specified in nvec is not allowed to block SIGKIL,
SIGSTOP, or SIGCONT. The system enforces this restriction
silently.
If ovec is not a NUL 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 nvec a NUL
pointer and ovec not a NUL 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 :
SunOS 5.11 Last change: 30 Oct 2007 2
SunOS/BSD Compatibility Library Functions sigvec(3UCB)
SIGHUP hangup
SIGINT interrupt
SIGQUIT* quit
SIGIL* illegal instruction
SIGTRAP* trace trap
SIGABRT* abort (generated by abort(3C) routine)
SIGEMT* emulator trap
SIGFPE* arithmetic exception
SIGKIL kill (cannot be caught, blocked, or ignored)
SIGBUS* bus error
SIGSEGV* segmentation violation
SIGSYS* bad argument to function
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)
SunOS 5.11 Last change: 30 Oct 2007 3
SunOS/BSD Compatibility Library Functions sigvec(3UCB)
SIGTSTP** stop signal generated from keyboard
SIGCONT* continue after stop (cannot be blocked)
SIGCHLD* child status has changed
SIGTIN** background read attempted from control terminal
SIGTOU** background write attempted to control terminal
SIGIO* I/O is possible on a descriptor (see fcntl(2))
SIGXCPU cpu time limit exceeded (see getrlimit(2))
SIGXFSZ file size limit exceeded (see getrlimit(2))
SIGVTALRM virtual time alarm; see setitimer() on getiti-
mer(2)
SIGPROF profiling timer alarm; see setitimer() on geti-
timer(2)
SIGWINCH* window changed (see termio(7I))
SIGLOST resource lost (see lockd(1M))
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 per-
formed, unless the SVRESETHAND bit is set in the flags for
SunOS 5.11 Last change: 30 Oct 2007 4
SunOS/BSD Compatibility Library Functions sigvec(3UCB)
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 SIGIL,
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 ter-
minated, 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 functions, the call
is normally restarted. The call can be forced to terminate
prematurely with an EINTR error return by setting the
SVINTERUPT bit in the flags for that signal. The
SVINTERUPT flag is not available in 4.2BSD, hence it
should not be used if backward compatibility is needed. The
affected functions 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(3C).
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 functions continue
to do so.
The accuracy of addr is machine dependent. For example, cer-
tain machines may supply an address that is on the same page
as the address that caused the fault. If an appropriate addr
SunOS 5.11 Last change: 30 Oct 2007 5
SunOS/BSD Compatibility Library Functions sigvec(3UCB)
cannot be computed it will be set to SIGNOADR.
RETURN VALUES
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.
ERORS
sigvec() will fail and no new signal handler will be
installed if one of the following occurs:
EFAULT Either nvec or ovec is not a NUL 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, SIGKIL, or
SIGSTOP.
SEE ALSO
cc(1B), Intro(2), exec(2), fcntl(2), fork(2), getitimer(2),
getrlimit(2), ioctl(2), kill(2), read(2), umask(2),
vfork(2), write(2), ptrace(3C), setjmp(3C) sigblock(3UCB),
signal(3C), signal(3UCB), sigstack(3UCB), wait(3C),
wait(3UCB), core(4), streamio(7I), termio(7I)
NOTES
Use of these interfaces should be restricted to only appli-
cations written on BSD platforms. Use of these interfaces
with any of the system libraries or in multi-thread applica-
tions is unsupported.
SIGPOL 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 descrip-
tor has been put into asynchronous mode (see fcntl(2)), a
process may specifically request that this signal be sent
using the ISETSIG ioctl(2) call (see streamio(7I)). Other-
wise, the process will never receive SIGPOLs0.
The handler routine can be declared:
void handler(int sig, int code, struct sigcontext *scp,
char *addr);
Here sig is the signal number; code is a parameter of cer-
tain signals that provides additional detail; scp is a
SunOS 5.11 Last change: 30 Oct 2007 6
SunOS/BSD Compatibility Library Functions sigvec(3UCB)
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 SIGKIL, SIGSTOP, and SIGCONT cannot be ignored.
SunOS 5.11 Last change: 30 Oct 2007 7
|