237 lines
6.5 KiB
Groff
237 lines
6.5 KiB
Groff
|
||
|
||
SIGACTION(2) Minix Programmer's Manual SIGACTION(2)
|
||
|
||
|
||
NAME
|
||
sigaction, signal - manage signal state and handlers
|
||
|
||
SYNOPSIS
|
||
#include <signal.h>
|
||
|
||
int sigaction(int sig, const struct sigaction *act, struct sigaction
|
||
*oact)
|
||
void (*signal(int sig, void (*handler)(int)))(int);
|
||
|
||
DESCRIPTION
|
||
Sigaction() is used to examine, set, or modify the attributes of a
|
||
signal. The argument sig is the signal in question. The act argument
|
||
points to a structure containing the new attributes of the signal, the
|
||
structure pointed to by oact will receive the old attributes that were in
|
||
effect before the call.
|
||
|
||
The act and oact arguments may be NULL to indicate that either no new
|
||
attributes are to be set, or that the old attributes are not of interest.
|
||
|
||
The structure containing the signal attributes is defined in <signal.h>
|
||
and looks like this:
|
||
|
||
struct sigaction {
|
||
void (*sa_handler)(int sig);
|
||
sigset_t sa_mask;
|
||
int sa_flags;
|
||
};
|
||
|
||
The sa_handler field contains the address of a signal handler, a function
|
||
that is called when the process is signalled, or one of these special
|
||
constants:
|
||
|
||
SIG_DFL Default signal handling is to be performed. This usually
|
||
means that the process is killed, but some signals may be
|
||
ignored by default.
|
||
|
||
SIG_IGN Ignore the signal.
|
||
|
||
The sa_mask field indicates a set of signals that must be blocked when
|
||
the signal is being handled. Whether the signal sig itself is blocked
|
||
when being handled is not controlled by this mask. The mask is of a
|
||
"signal set" type that is to be manipulated by the sigset(3) functions.
|
||
|
||
How the signal is handled precisely is specified by bits in sa_flags. If
|
||
none of the flags is set then the handler is called when the signal
|
||
arrives. The signal is blocked during the call to the handler, and
|
||
unblocked when the handler returns. A system call that is interrupted
|
||
returns -1 with errno set to EINTR. The following bit flags can be set
|
||
to modify this behaviour:
|
||
|
||
|
||
1
|
||
|
||
|
||
|
||
SIGACTION(2) Minix Programmer's Manual SIGACTION(2)
|
||
|
||
|
||
SA_RESETHAND Reset the signal handler to SIG_DFL when the signal is
|
||
caught.
|
||
|
||
SA_NODEFER Do not block the signal on entry to the handler.
|
||
|
||
SA_COMPAT Handle the signal in a way that is compatible with the the
|
||
old signal() call.
|
||
|
||
The old signal() signal system call sets a signal handler for a given
|
||
signal and returns the old signal handler. No signals are blocked, the
|
||
flags are SA_RESETHAND | SA_NODEFER | SA_COMPAT. New code should not use
|
||
signal(). Note that signal() and all of the SA_* flags are Minix
|
||
extensions.
|
||
|
||
Signal handlers are reset to SIG_DFL on an execve(2). Signals that are
|
||
ignored stay ignored.
|
||
|
||
Signals
|
||
Minix knows about the following signals:
|
||
|
||
signal num notes description
|
||
|
||
SIGHUP 1 k Hangup
|
||
SIGINT 2 k Interrupt (usually DEL or CTRL-C)
|
||
SIGQUIT 3 kc Quit (usually CTRL-\)
|
||
SIGILL 4 kc Illegal instruction
|
||
SIGTRAP 5 xkc Trace trap
|
||
SIGABRT 6 kc Abort program
|
||
SIGFPE 8 k Floating point exception
|
||
SIGKILL 9 k Kill
|
||
SIGUSR1 10 k User defined signal #1
|
||
SIGSEGV 11 kc Segmentation fault
|
||
SIGUSR2 12 k User defined signal #2
|
||
SIGPIPE 13 k Write to a pipe with no reader
|
||
SIGALRM 14 k Alarm clock
|
||
SIGTERM 15 k Terminate (default for kill(1))
|
||
SIGCHLD 17 pvi Child process terminated
|
||
SIGCONT 18 p Continue if stopped
|
||
SIGSTOP 19 ps Stop signal
|
||
SIGTSTP 20 ps Interactive stop signal
|
||
SIGTTIN 21 ps Background read
|
||
SIGTTOU 22 ps Background write
|
||
SIGWINCH 23 xvi Window size change
|
||
|
||
The letters in the notes column indicate:
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
2
|
||
|
||
|
||
|
||
SIGACTION(2) Minix Programmer's Manual SIGACTION(2)
|
||
|
||
|
||
k The process is killed if the signal is not caught.
|
||
|
||
c The signal causes a core dump.
|
||
|
||
i The signal is ignored if not caught.
|
||
|
||
v Only Minix-vmd implements this signal.
|
||
|
||
x Minix extension, not defined by POSIX.
|
||
|
||
p These signals are not implemented, but POSIX requires that they are
|
||
defined.
|
||
|
||
s The process should be stopped, but is killed instead.
|
||
|
||
The SIGKILL signal cannot be caught or ignored. The SIGILL and SIGTRAP
|
||
signals cannot be automatically reset. The system silently enforces
|
||
these restrictions. This may or may not be reflected by the attributes
|
||
of these signals and the signal masks.
|
||
|
||
Types
|
||
POSIX prescribes that <sys/types.h> has the following definition:
|
||
|
||
typedef int (*sighandler_t)(int)
|
||
|
||
With this type the following declarations can be made:
|
||
|
||
sighandler_t sa_handler;
|
||
sighandler_t signal(int sig, sighandler_t handler);
|
||
|
||
This may help you to understand the earlier declarations better. The
|
||
sighandler_t type is also very useful in old style C code that is
|
||
compiled by a compiler for standard C.
|
||
|
||
SEE ALSO
|
||
kill(1), kill(2), pause(2), sigprocmask(2), sigsuspend(2), sigpending(2),
|
||
sigset(3).
|
||
|
||
DIAGNOSTICS
|
||
Sigaction() returns 0 on success or -1 on error. Signal() returns the
|
||
old handler on success or SIG_ERR on error. The error code may be:
|
||
|
||
EINVAL Bad signal number.
|
||
|
||
EFAULT Bad act or oact addresses.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
3
|
||
|
||
|
||
|
||
SIGACTION(2) Minix Programmer's Manual SIGACTION(2)
|
||
|
||
|
||
AUTHOR
|
||
Kees J. Bot (kjb@cs.vu.nl)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
4
|
||
|