sigaction(2) 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 (*sa_handler)();
sigset_t sa_mask;
int sa_flags;
sa_handler specifies the disposition of the signal and may take any
of the values specified in signal(5).
sa_mask 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 SA_NODEFER flag has
been specified. SIGSTOP and SIGKILL cannot be blocked (the system
silently enforces this restriction).
sa_flags 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:
SA_ONSTACK 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.
7/91 Page 1
sigaction(2) sigaction(2)
SA_RESETHAND If set and the signal is caught, the
disposition of the signal is reset to
SIG_DFL and the signal will not be blocked
on entry to the signal handler (SIGILL,
SIGTRAP, and SIGPWR cannot be automatically
reset when delivered; the system silently
enforces this restriction).
SA_NODEFER If set and the signal is caught, the signal
will not be automatically blocked by the
kernel while it is being caught.
SA_RESTART 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.
SA_SIGINFO 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, pending signals of type sig are
reliably queued to the calling process and
two additional arguments are passed to the
signal-catching function. If the second
argument is not equal to NULL, it points to
a siginfo_t structure containing the reason
why the signal was generated [see
siginfo(5)]; the third argument points to a
ucontext_t structure containing the
receiving process's context when the signal
was delivered [see ucontext(5)].
SA_NOCLDWAIT 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.
SA_NOCLDSTOP 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.
Page 2 7/91
sigaction(2) sigaction(2)
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.
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)].
7/91 Page 3