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(2).
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:
Copyright 1994 Novell, Inc. Page 1
sigaction(2) sigaction(2)
SA_ONSTACK If set and the signal is caught and an
alternate signal stack has been declared by
the receiving LWP the signal is delivered on
that stack. Otherwise, the signal should be
delivered on the current stack of the
receiving LWP.
The SA_ONSTACK flag specifies that whenever
the process receives the signal type sig the
response is handled on an alternative stack.
The location and size of the alternative stack
is specified per LWP.
Alternate signal handling stacks can be
defined via the sigaltstack(2) system call.
SA_RESETHAND If set and the signal is caught, the
disposition of the signal is reset to SIG_DFL
(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 call that
is interrupted by the execution of this
signal's handler is transparently restarted by
the system. Otherwise, that call returns an
EINTR error. Some system calls cannot be
restarted when they are interrupted, even when
SA_RESTART is set. For example, sleep(3C),
pause(2), sigpause(3BSD), sigsuspend(2) cannot
be restarted.
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, 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
Copyright 1994 Novell, Inc. Page 2
sigaction(2) sigaction(2)
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.
SA_WAITSIG When sig is SIGWAITING [see signal(5)] this
flag requests the generation of the SIGWAITING
signal type when all LWPs of the process are
blocked at an interruptible priority.
The SA_WAITSIG signal type might be used by
user level threads libraries trigger the
creation of additional LWPs for the process.
Return Values
On success, sigaction returns 0. On failure, sigaction
returns -1 and sets errno to identify the error.
Errors
In the following conditions, sigaction fails and sets errno
to:
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.
REFERENCES
exit(2), intro(2), kill(1), kill(2), pause(2), sigaltstack(2),
siginfo(5), signal(2), signal(5), sigprocmask(2), sigsend(2),
sigsetops(3C), sigsuspend(2), ucontext(5), wait(2)
Copyright 1994 Novell, Inc. Page 3
sigaction(2) sigaction(2)
NOTICES
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)].
Considerations for Threads Programming
The handler defined by act is common to all threads in a
process.
The Threads Library does not support alternate signal handling
stacks for threads.
The SA_WAITSIG flag (see description above) can be used in
support of threads libraries.
Further details can be found in signal(5).
Copyright 1994 Novell, Inc. Page 4