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 $
 | 
