sigvec(2)sigvec(2)Namesigvec - software signal facilities
Syntax
#include <signal.h>
struct sigvec {
void (*sv_handler)();
sigset_t sv_mask;
int sv_flags;
};
sigvec(sig, vec, ovec)
int sig;
struct sigvec *vec, *ovec;
Description
The system defines a set of signals that can 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 can specify a handler to
which a signal is delivered, or specify that a signal is to be blocked
or ignored. A process can 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 can 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
can 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 or 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, 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 later), and the signal handler is
invoked. The call to the handler is arranged so that, if the signal
handling routine returns normally, the process resumes execution in the
context from before the signal's delivery. If the process wishes to
resume in a different context, 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's signal handler (or until a or 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.
The system call assigns a handler for a specific signal. If vec is
nonzero, it specifies a handler routine and mask to be used when deliv‐
ering the specified signal. Further, if the SV_ONSTACK bit is set in
sv_flags, the system delivers the signal to the process on a signal
stack, specified with If ovec is nonzero, the previous handling infor‐
mation for the signal is returned to the user.
The following is a list of all signals with names as in the include
file
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
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
SIGLOST 29 lock not reclaimed after server recovery
SIGUSR1 30 user defined signal 1
SIGUSR2 31 user defined signal 2
SIGCLD System V name for SIGCHLD
SIGABRT X/OPEN name for SIGIOT
The signals marked with asterisks (*) in this list cause a core image
if not caught or ignored. Explanations of the meaning of the periods
(.) and plus signs (+) are included in the following paragraph.
Once a signal handler is installed, it remains installed until another
call is made or an is performed. The default action for a signal can
be reinstated by setting sv_handler to SIG_DFL. This default is termi‐
nation (with a core image for signals marked with asterisks (*)),
except for signals marked with periods (.) or plus signs (+). Signals
marked with periods (.) are discarded if the action is SIG_DFL. Sig‐
nals marked with plus signs (+) cause the process to stop. If sv_han‐
dler 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 or on a slow device (such as a terminal;
but not a file), and
After a or the child inherits all signals, the signal mask, the signal
stack, and the restart/interrupt flags.
The system 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 mask specified in vec is not allowed to block SIGKILL or SIGSTOP.
This is done silently by the system.
The SV_INTERRUPT flag is not available in ULTRIX 2.0 or earlier ver‐
sions. Therefore, it should not be used if backward compatibility is
needed.
Notes
The handler routine can be declared:
void 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 in the following table. The code is a parameter
that is either a constant or, for compatibility mode faults, the code
provided by the hardware. Compatibility mode faults are distinguished
from the other SIGILL traps by having PSL_CM set in the psl. The scp
is a pointer to the sigcontext structure (defined in ), 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
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 faulting virtual addr
Protection violation SIGBUS faulting virtual addr
Reserved instruction SIGILL ILL_PRIVIN_FAULT
Customer-reserved instr. SIGEMT
Reserved operand SIGILL ILL_RESOP_FAULT
Reserved addressing SIGILL ILL_RESAD_FAULT
Trace pending SIGTRAP
Bpt instruction SIGTRAP
Compatibility-mode SIGILL hardware-supplied code
Chme SIGSEGV
Chms SIGSEGV
Chmu SIGSEGV
Return Values
A zero (0) value indicates that the call succeeded. A -1 return value
indicates an error occurred, and errno is set to indicate the reason.
Diagnostics
The system call fails and no new signal handler is 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] The sig argument is not a valid signal number.
[EINVAL] An attempt is made to ignore or supply a handler for
SIGKILL or SIGSTOP.
Environment
SYSTEM_FIVE
You can not use the call in your program under SYSTEM_FIVE envi‐
ronment.
See Alsokill(1), kill(2), ptrace(2), sigblock(2), sigpause(2), sigsetmask(2),
sigstack(2), setjmp(3), siginterrupt(3), tty(4)
VAX sigvec(2)