sigaction(2) UNIX System V sigaction(2)
NAME
sigaction - detailed signal management
SYNOPSIS
#include <signal.h>
int sigaction(int sig, const struct sigaction *act,
struct sigaction *oact);
DESCRIPTION
sigaction allows the calling process to examine and/or specify the action
to be taken on delivery of a specific signal. [See signal(5) for an
explanation of general signal concepts.]
sig specifies the signal and can be assigned any of the signals specified
in signal(5) except SIGKILL and SIGSTOP
If the argument act is not NULL, it points to a structure specifying the
new action to be taken when delivering sig. If the argument oact is not
NULL, it points to a structure where the action previously associated
with sig is to be stored on return from sigaction.
The sigaction structure includes the following members:
void (*sahandler)();
sigsett samask;
int saflags;
sahandler specifies the disposition of the signal and may take any of
the values specified in signal(5).
samask specifies a set of signals to be blocked while the signal handler
is active. On entry to the signal handler, that set of signals is added
to the set of signals already being blocked when the signal is delivered.
In addition, the signal that caused the handler to be executed will also
be blocked, unless the SANODEFER flag has been specified. SIGSTOP and
SIGKILL cannot be blocked (the system silently enforces this
restriction).
saflags specifies a set of flags used to modify the delivery of the
signal. It is formed by a logical OR of any of the following values:
SAONSTACK If set and the signal is caught and an
alternate signal stack has been declared with
sigaltstack(2), the signal is delivered to the
calling process on that stack. Otherwise, the
signal is delivered on the same stack as the
main program.
SARESETHAND If set and the signal is caught, the
disposition of the signal is reset to SIGDFL
and the signal will not be blocked on entry to
10/89 Page 1
sigaction(2) UNIX System V sigaction(2)
the signal handler (SIGILL, SIGTRAP, and SIGPWR
cannot be automatically reset when delivered;
the system silently enforces this restriction).
SANODEFER If set and the signal is caught, the signal
will not be automatically blocked by the kernel
while it is being caught.
SARESTART If set and the signal is caught, a system call
that is interrupted by the execution of this
signal's handler is transparently restarted by
the system. Otherwise, that system call
returns an EINTR error.
SASIGINFO If cleared and the signal is caught, sig is
passed as the only argument to the signal-
catching function. If set and the signal is
caught, two additional arguments are passed to
the signal-catching function. If the second
argument is not equal to NULL, it points to a
siginfot structure containing the reason why
the signal was generated [see siginfo(5)]; the
third argument points to a ucontextt structure
containing the receiving process's context when
the signal was delivered [see ucontext(5)].
SANOCLDWAIT If set and sig equals SIGCHLD, the system will
not create zombie processes when children of
the calling process exit. If the calling
process subsequently issues a wait(2), it
blocks until all of the calling process's child
processes terminate, and then returns a value
of -1 with errno set to ECHILD.
SANOCLDSTOP If set and sig equals SIGCHLD, sig will not be
sent to the calling process when its child
processes stop or continue.
sigaction fails if any of the following is true:
EINVAL The value of the sig argument is not a valid signal number
or is equal to SIGKILL or SIGSTOP.
EFAULT act or oact points outside the process's allocated address
space.
DIAGNOSTICS
On success, sigaction returns zero. On failure, it returns -1 and sets
errno to indicate the error.
Page 2 10/89
sigaction(2) UNIX System V sigaction(2)
SEE ALSO
intro(2), exit(2), kill(2), pause(2), sigaltstack(2), signal(2),
sigprocmask(2), sigsend(2), sigsuspend(2), wait(2), sigsetops(3C),
siginfo(5), signal(5), ucontext(5).
kill(1) in the User's Reference Manual.
NOTES
If the system call is reading from or writing to a terminal and the
terminal's NOFLSH bit is cleared, data may be flushed [see termio(7)].
10/89 Page 3