256 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			256 lines
		
	
	
		
			5.6 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.TH SIGACTION 2
 | 
						|
.SH NAME
 | 
						|
sigaction, signal \- manage signal state and handlers
 | 
						|
.SH SYNOPSIS
 | 
						|
.ft B
 | 
						|
#include <signal.h>
 | 
						|
 | 
						|
.in +5
 | 
						|
.ti -5
 | 
						|
int sigaction(int \fIsig\fP, const struct sigaction *\fIact\fP, struct sigaction *\fIoact\fP)
 | 
						|
.in -5
 | 
						|
.br
 | 
						|
void (*signal(int \fIsig\fP, void (*\fIhandler\fP)(int)))(int);
 | 
						|
.ft P
 | 
						|
.SH DESCRIPTION
 | 
						|
.de SP
 | 
						|
.if t .sp 0.4
 | 
						|
.if n .sp
 | 
						|
..
 | 
						|
.B Sigaction()
 | 
						|
is used to examine, set, or modify the attributes of a signal.  The argument
 | 
						|
.I sig
 | 
						|
is the signal in question.  The
 | 
						|
.I act
 | 
						|
argument points to a structure containing the new attributes of the signal,
 | 
						|
the structure pointed to by
 | 
						|
.I oact
 | 
						|
will receive the old attributes that were in effect before the call.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.I act
 | 
						|
and
 | 
						|
.I oact
 | 
						|
arguments may be
 | 
						|
.B NULL
 | 
						|
to indicate that either no new attributes are to be set, or that the old
 | 
						|
attributes are not of interest.
 | 
						|
.PP
 | 
						|
The structure containing the signal attributes is defined in <signal.h> and
 | 
						|
looks like this:
 | 
						|
.PP
 | 
						|
.RS
 | 
						|
.nf
 | 
						|
.ft B
 | 
						|
.ta +4n +12n
 | 
						|
struct sigaction {
 | 
						|
	void	(*sa_handler)(int sig);
 | 
						|
	sigset_t	sa_mask;
 | 
						|
	int	sa_flags;
 | 
						|
};
 | 
						|
.ft R
 | 
						|
.fi
 | 
						|
.RE
 | 
						|
.PP
 | 
						|
The
 | 
						|
.B 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:
 | 
						|
.PP
 | 
						|
.TP 12
 | 
						|
.B 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.
 | 
						|
.TP
 | 
						|
.B SIG_IGN
 | 
						|
Ignore the signal.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.B sa_mask
 | 
						|
field indicates a set of signals that must be blocked when the signal is
 | 
						|
being handled.  Whether the signal
 | 
						|
.I 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
 | 
						|
.BR sigset (3)
 | 
						|
functions.
 | 
						|
.PP
 | 
						|
How the signal is handled precisely is specified by bits in
 | 
						|
.BR 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
 | 
						|
.B \-1
 | 
						|
with
 | 
						|
.B errno
 | 
						|
set to
 | 
						|
.BR EINTR .
 | 
						|
The following bit flags can be set to modify this behaviour:
 | 
						|
.PP
 | 
						|
.TP 15
 | 
						|
.B SA_RESETHAND
 | 
						|
Reset the signal handler to
 | 
						|
.B SIG_DFL
 | 
						|
when the signal is caught.
 | 
						|
.TP
 | 
						|
.B SA_NODEFER
 | 
						|
Do not block the signal on entry to the handler.
 | 
						|
.TP
 | 
						|
.B SA_COMPAT
 | 
						|
Handle the signal in a way that is compatible with the the old
 | 
						|
.B signal()
 | 
						|
call.
 | 
						|
.PP
 | 
						|
The old
 | 
						|
.B 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
 | 
						|
.BR "SA_RESETHAND | SA_NODEFER | SA_COMPAT" .
 | 
						|
New code should not use
 | 
						|
.BR signal() .
 | 
						|
Note that
 | 
						|
.B signal()
 | 
						|
and all of the
 | 
						|
.B SA_*
 | 
						|
flags are MINIX 3 extensions.
 | 
						|
.PP
 | 
						|
Signal handlers are reset to
 | 
						|
.B SIG_DFL
 | 
						|
on an
 | 
						|
.BR execve (2).
 | 
						|
Signals that are ignored stay ignored.
 | 
						|
.SS Signals
 | 
						|
MINIX 3 knows about the following signals:
 | 
						|
.PP
 | 
						|
.nf
 | 
						|
.ta +11n +7n +8n
 | 
						|
signal	num	notes	description
 | 
						|
.SP
 | 
						|
SIGHUP	1	km	Hangup
 | 
						|
SIGINT	2	k	Interrupt (usually DEL or CTRL\-C)
 | 
						|
SIGQUIT	3	kcm	Quit (usually CTRL\-\e)
 | 
						|
SIGILL	4	Kc	Illegal instruction
 | 
						|
SIGTRAP	5	Kc	Trace trap
 | 
						|
SIGABRT	6	kcm	Abort program
 | 
						|
SIGBUS	7	Kc	Bus error
 | 
						|
SIGFPE	8	Kc	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	km	Terminate (default for kill(1))
 | 
						|
SIGEMT	16	xKc	Emulator trap
 | 
						|
SIGCHLD	17	pi	Child process terminated
 | 
						|
SIGCONT	18	pi	Continue if stopped
 | 
						|
SIGSTOP	19	ps	Stop signal
 | 
						|
SIGTSTP	20	ps	Interactive stop signal
 | 
						|
SIGWINCH	21	xi	Window size change
 | 
						|
SIGTTIN	22	ps	Background read
 | 
						|
SIGTTOU	23	ps	Background write
 | 
						|
SIGVTALRM	24	k	Virtual alarm clock
 | 
						|
SIGPROF	25	k	Profiler alarm clock
 | 
						|
.ft R
 | 
						|
.fi
 | 
						|
.PP
 | 
						|
The letters in the notes column indicate:
 | 
						|
.PP
 | 
						|
.TP 5
 | 
						|
.B k
 | 
						|
The process is killed if the signal is not caught.
 | 
						|
.TP
 | 
						|
.B K
 | 
						|
The process is killed if the signal is not caught. If the signal is received
 | 
						|
due to an exception while ignored or masked, the process is killed even if a 
 | 
						|
handler is defined to catch the signal.
 | 
						|
.TP
 | 
						|
.B c
 | 
						|
The signal causes a core dump.
 | 
						|
.TP
 | 
						|
.B i
 | 
						|
The signal is ignored if not caught.
 | 
						|
.TP
 | 
						|
.B m
 | 
						|
The signal is converted to a message for system processes.
 | 
						|
.TP
 | 
						|
.B x
 | 
						|
MINIX 3 extension, not defined by \s-2POSIX\s+2.
 | 
						|
.TP
 | 
						|
.B p
 | 
						|
These signals are not implemented, but \s-2POSIX\s+2 requires that they are
 | 
						|
defined.
 | 
						|
.TP
 | 
						|
.B s
 | 
						|
The process should be stopped, but is killed instead.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.B SIGKILL
 | 
						|
and
 | 
						|
.B SIGSTOP
 | 
						|
signals cannot be caught or ignored.  The
 | 
						|
.B SIGILL
 | 
						|
and
 | 
						|
.B 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.
 | 
						|
.SS Types
 | 
						|
\s-2POSIX\s+2 prescribes that <sys/types.h> has the following definition:
 | 
						|
.PP
 | 
						|
.RS
 | 
						|
.B "typedef int (*sighandler_t)(int)"
 | 
						|
.RE
 | 
						|
.PP
 | 
						|
With this type the following declarations can be made:
 | 
						|
.PP
 | 
						|
.RS
 | 
						|
.ft B
 | 
						|
.nf
 | 
						|
sighandler_t sa_handler;
 | 
						|
sighandler_t signal(int \fIsig\fP, sighandler_t \fIhandler\fP);
 | 
						|
.fi
 | 
						|
.ft R
 | 
						|
.RE
 | 
						|
.PP
 | 
						|
This may help you to understand the earlier declarations better.  The
 | 
						|
.B sighandler_t
 | 
						|
type is also very useful in old style C code that is compiled by a compiler
 | 
						|
for standard C.
 | 
						|
.SH "SEE ALSO"
 | 
						|
.BR kill (1),
 | 
						|
.BR kill (2),
 | 
						|
.BR pause (2),
 | 
						|
.BR sigprocmask (2),
 | 
						|
.BR sigsuspend (2),
 | 
						|
.BR sigpending (2),
 | 
						|
.BR sigset (3).
 | 
						|
.SH DIAGNOSTICS
 | 
						|
.B Sigaction()
 | 
						|
returns
 | 
						|
.B 0
 | 
						|
on success or
 | 
						|
.B \-1
 | 
						|
on error.
 | 
						|
.B Signal()
 | 
						|
returns the old handler on success or
 | 
						|
.B SIG_ERR
 | 
						|
on error.  The error code may be:
 | 
						|
.PP
 | 
						|
.TP 10
 | 
						|
.B EINVAL
 | 
						|
Bad signal number.
 | 
						|
.TP
 | 
						|
.B EFAULT
 | 
						|
Bad
 | 
						|
.I act
 | 
						|
or
 | 
						|
.I oact
 | 
						|
addresses.
 | 
						|
.SH AUTHOR
 | 
						|
Kees J. Bot (kjb@cs.vu.nl)
 | 
						|
 | 
						|
.\"
 | 
						|
.\" $PchId: sigaction.2,v 1.2 1996/04/11 06:00:28 philip Exp $
 |