Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
SIGACTION(2)		  FreeBSD System Calls Manual		  SIGACTION(2)

     sigaction -- software signal facilities

     #include <signal.h>

     struct sigaction {
	     void     (*sa_handler)();	/* signal handler */
	     sigset_t sa_mask;		/* signal mask to apply	*/
	     int      sa_flags;		/* see signal options below */

     sigaction(int sig,	const struct sigaction *act, struct sigaction *oact);

     The system	defines	a set of signals that may be delivered to a process.
     Signal delivery resembles the occurrence of a hardware interrupt: the
     signal is normally	blocked	from further occurrence, the current process
     context is	saved, and a new one is	built.	A process may specify a
     handler to	which a	signal is delivered, or	specify	that a signal is to be
     ignored.  A process may also specify that a default action	is to be taken
     by	the system when	a signal occurs.  A signal may also be blocked,	in
     which case	its delivery is	postponed until	it is unblocked.  The action
     to	be taken on delivery is	determined at the time of delivery.  Normally,
     signal handlers execute on	the current stack of the process.  This	may be
     changed, on a per-handler basis, so that signals are taken	on a special
     signal stack.

     Signal routines normally execute with the signal that caused their	invo-
     cation blocked, but other signals may yet occur.  A global	signal mask
     defines the set of	signals	currently blocked from delivery	to a process.
     The signal	mask for a process is initialized from that of its parent
     (normally empty).	It may be changed with a sigprocmask(2)	call, or when
     a signal is delivered to the process.

     When a signal condition arises for	a process, the signal is added to a
     set of signals pending for	the process.  If the signal is not currently
     blocked by	the process then it is delivered to the	process.  Signals may
     be	delivered any time a process enters the	operating system (e.g.,	during
     a system call, page fault or trap,	or clock interrupt).  If multiple sig-
     nals are ready to be delivered at the same	time, any signals that could
     be	caused by traps	are delivered first.  Additional signals may be	pro-
     cessed at the same	time, with each	appearing to interrupt the handlers
     for the previous signals before their first instructions.	The set	of
     pending signals is	returned by the	sigpending(2) function.	 When a	caught
     signal is delivered, the current state of the process is saved, a new
     signal mask is calculated (as described below), and the signal handler is
     invoked.  The call	to the handler is arranged so that if the signal han-
     dling routine returns normally the	process	will resume execution in the
     context from before the signal's delivery.	 If the	process	wishes to
     resume in a different context, then it must arrange to restore the	previ-
     ous context itself.

     When a signal is delivered	to a process a new signal mask is installed
     for the duration of the process' signal handler (or until a sigprocmask
     call is made).  This mask is formed by taking the union of	the current
     signal mask set, the signal to be delivered, and the signal mask associ-
     ated with the handler to be invoked.

     Sigaction() assigns an action for a signal	specified by sig.  If act is
     non-zero, it specifies an action (SIG_DFL,	SIG_IGN, or a handler routine)
     and mask to be used when delivering the specified signal.	If oact	is
     non-zero, the previous handling information for the signal	is returned to
     the user.

     Once a signal handler is installed, it normally remains installed until
     another sigaction() call is made, or an execve(2) is performed.  A	sig-
     nal-specific default action may be	reset by setting sa_handler to
     SIG_DFL.  The defaults are	process	termination, possibly with core	dump;
     no	action;	stopping the process; or continuing the	process.  See the sig-
     nal list below for	each signal's default action.  If sa_handler is
     SIG_DFL, the default action for the signal	is to discard the signal, and
     if	a signal is pending, the pending signal	is discarded even if the sig-
     nal is masked.  If	sa_handler is set to SIG_IGN current and pending
     instances of the signal are ignored and discarded.

     Options may be specified by setting sa_flags.  If the SA_NOCLDSTOP	bit is
     set when installing a catching function for the SIGCHLD signal, the
     SIGCHLD signal will be generated only when	a child	process	exits, not
     when a child process stops.  Further, if the SA_ONSTACK bit is set	in
     sa_flags, the system will deliver the signal to the process on a signal
     stack, specified with sigaltstack(2).  If the SA_NODEFER bit is set, fur-
     ther occurrences of the delivered signal are not masked during the	execu-
     tion of the handler.  If the SA_RESETHAND bit is set, the handler is
     reset back	to SIG_DFL at the moment the signal is delivered.

     If	a signal is caught during the system calls listed below, the call may
     be	forced to terminate with the error EINTR, the call may return with a
     data transfer shorter than	requested, or the call may be restarted.
     Restart of	pending	calls is requested by setting the SA_RESTART bit in
     sa_flags.	The affected system calls include open(2), read(2), write(2),
     sendto(2),	recvfrom(2), sendmsg(2)	and recvmsg(2) on a communications
     channel or	a slow device (such as a terminal, but not a regular file) and
     during a wait(2) or ioctl(2).  However, calls that	have already committed
     are not restarted,	but instead return a partial success (for example, a
     short read	count).

     After a fork(2) or	vfork(2) all signals, the signal mask, the signal
     stack, and	the restart/interrupt flags are	inherited by the child.

     Execve(2) reinstates the default action for all signals which were	caught
     and resets	all signals to be caught on the	user stack.  Ignored signals
     remain ignored; the signal	mask remains the same; signals that restart
     pending system calls continue to do so.

     The following is a	list of	all signals with names as in the include file

       NAME	     Default Action	     Description
     SIGHUP	     terminate process	     terminal line hangup
     SIGINT	     terminate process	     interrupt program
     SIGQUIT	     create core image	     quit program
     SIGILL	     create core image	     illegal instruction
     SIGTRAP	     create core image	     trace trap
     SIGABRT	     create core image	     abort(3) call (formerly SIGIOT)
     SIGEMT	     create core image	     emulate instruction executed
     SIGFPE	     create core image	     floating-point exception
     SIGKILL	     terminate process	     kill program
     SIGBUS	     create core image	     bus error
     SIGSEGV	     create core image	     segmentation violation
     SIGSYS	     create core image	     non-existent system call invoked
     SIGPIPE	     terminate process	     write on a	pipe with no reader
     SIGALRM	     terminate process	     real-time timer expired
     SIGTERM	     terminate process	     software termination signal
     SIGURG	     discard signal	     urgent condition present on
     SIGSTOP	     stop process	     stop (cannot be caught or
     SIGTSTP	     stop process	     stop signal generated from
     SIGCONT	     discard signal	     continue after stop
     SIGCHLD	     discard signal	     child status has changed
     SIGTTIN	     stop process	     background	read attempted from
					     control terminal
     SIGTTOU	     stop process	     background	write attempted	to
					     control terminal
     SIGIO	     discard signal	     I/O is possible on	a descriptor
					     (see fcntl(2))
     SIGXCPU	     terminate process	     cpu time limit exceeded (see
     SIGXFSZ	     terminate process	     file size limit exceeded (see
     SIGVTALRM	     terminate process	     virtual time alarm	(see
     SIGPROF	     terminate process	     profiling timer alarm (see
     SIGWINCH	     discard signal	     Window size change
     SIGINFO	     discard signal	     status request from keyboard
     SIGUSR1	     terminate process	     User defined signal 1
     SIGUSR2	     terminate process	     User defined signal 2

     The sa_mask field specified in act	is not allowed to block	SIGKILL	or
     SIGSTOP.  Any attempt to do so will be silently ignored.

     A 0 value indicated that the call succeeded.  A -1	return value indicates
     an	error occurred and errno is set	to indicated the reason.

     The handler routine can be	declared:

	   void	handler(sig, code, scp)
	   int sig, code;
	   struct sigcontext *scp;

     Here sig is the signal number, into which the hardware faults and traps
     are mapped.  Code is a parameter that is either a constant	or the code
     provided by the hardware.	Scp is a pointer to the	sigcontext structure
     (defined in <signal.h>), used to restore the context from before the sig-

     Sigaction() will fail and no new signal handler will be installed if one
     of	the following occurs:

     [EFAULT]		Either act or oact points to memory that is not	a
			valid part of the process address space.

     [EINVAL]		Sig is not a valid signal number.

     [EINVAL]		An attempt is made to ignore or	supply a handler for

     The sigaction() function call is expected to conform to ISO/IEC
     9945-1:1990 (``POSIX.1'').	 The SA_ONSTACK	and SA_RESTART flags are
     Berkeley extensions, as are the signals, SIGTRAP, SIGEMT, SIGBUS, SIGSYS,
     SIGINFO.  Those signals are available on most BSD-derived systems.	 The
     SA_NODEFER	and SA_RESETHAND are intended for backwards compatability with
     other operating systems.

     kill(1), kill(2), ptrace(2), sigaltstack(2), sigblock(2), sigpause(2),
     sigprocmask(2), sigsetmask(2), sigsuspend(2), sigvec(2), setjmp(3),
     siginterrupt(3), sigsetops(3), tty(4)

FreeBSD	2.2.8			 April 3, 1994			 FreeBSD 2.2.8


Want to link to this manual page? Use this URL:

home | help