home *** CD-ROM | disk | FTP | other *** search
-
- SIGACTION(2) UNIX Programmer's Manual SIGACTION(2)
-
- NNAAMMEE
- ssiiggaaccttiioonn - software signal facilities
-
- SSYYNNOOPPSSIISS
- ##iinncclluuddee <<ssiiggnnaall..hh>>
- struct sigaction {
- void (*sa_handler)();
- sigset_t sa_mask;
- int sa_flags;
- };
-
- ssiiggaaccttiioonn(_i_n_t _s_i_g, _s_t_r_u_c_t _s_i_g_a_c_t_i_o_n _*_a_c_t, _s_t_r_u_c_t _s_i_g_a_c_t_i_o_n _*_o_a_c_t)
-
- DDEESSCCRRIIPPTTIIOONN
- The system defines a set of signals that may be delivered to a process.
- Signal delivery resembles the occurence of a hardware interrupt: the sig
- nal is blocked from further occurrence, the current process context is
- saved, and a new one is built. A process may specify a _h_a_n_d_l_e_r to which
- a signal is delivered, or specify that a signal is to be _i_g_n_o_r_e_d. A pro
- cess may also specify that a default action is to be taken by the system
- when a signal occurs. A signal may also be _b_l_o_c_k_e_d, in which case its
- delivery is postponed until it is _u_n_b_l_o_c_k_e_d. The action to be taken on
- delivery is determined at the time of delivery. Normally, signal han
- dlers execute on the current stack of the process. This may be changed,
- on a perhandler basis, so that signals are taken on a special _s_i_g_n_a_l
- _s_t_a_c_k.
-
- Signal routines execute with the signal that caused their invocation
- _b_l_o_c_k_e_d, but other signals may yet occur. A global _s_i_g_n_a_l _m_a_s_k 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 (normal
- ly empty). It may be changed with a sigprocmask(2) call, or when a sig
- nal 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
- _b_l_o_c_k_e_d 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 re
- sume in a different context, then it must arrange to restore the previous
- 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.
-
- SSiiggaaccttiioonn() assigns an action for a specific signal. If _a_c_t is nonzero,
- it specifies an action (SIG_DFL, SIG_IGN, or a handler routine) and mask
- to be used when delivering the specified signal. If _o_a_c_t is nonzero,
- the previous handling information for the signal is returned to the user.
-
- Once a signal handler is installed, it remains installed until another
- ssiiggaaccttiioonn() call is made, or an execve(2) is performed. A signal
- specific default action may be reset by setting _s_a___h_a_n_d_l_e_r to SIG_DFL.
- The defaults are process termination, possibly with core dump; no action;
- stopping the process; or continuing the process. See the signal list be
- low for each signal's default action. If _s_a___h_a_n_d_l_e_r is SIG_IGN current
- and pending instances of the signal are ignored and discarded.
-
- Options may be specified by setting _s_a___f_l_a_g_s. 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
- _s_a___f_l_a_g_s, the system will deliver the signal to the process on a _s_i_g_n_a_l
- _s_t_a_c_k, specified with sigstack(2).
-
- If a signal is caught during the system calls listed below, the call may
- be forced to terminate with the error EINTR, or the call may be restart
- ed. Restart of pending calls is requested by setting the SA_RESTART bit
- in _s_a___f_l_a_g_s. The affected system calls include 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
- <_s_i_g_n_a_l_._h>:
-
- NNAAMMEE DDeeffaauulltt AAccttiioonn DDeessccrriippttiioonn
- 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(2) call (formerly SIGIOT)
- SIGEMT create core image emulate instruction executed
- SIGFPE create core image floatingpoint exception
- SIGKILL terminate process kill program
- SIGBUS create core image bus error
- SIGSEGV create core image segmentation violation
- SIGSYS create core image system call given invalid
- argument
- SIGPIPE terminate process write on a pipe with no reader
- SIGALRM terminate process realtime timer expired
- SIGTERM terminate process software termination signal
- SIGURG discard signal urgent condition present on
- socket
- SIGSTOP stop process stop (cannot be caught or
- ignored)
- SIGTSTP stop process stop signal generated from
- keyboard
- 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
- setrlimit(2))
- SIGXFSZ terminate process file size limit exceeded (see
- setrlimit(2))
- SIGVTALRM terminate process virtual time alarm (see
- setitimer(2))
- SIGPROF terminate process profiling timer alarm (see
- setitimer(2))
- 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
-
- NNOOTTEE
- The mask specified in _a_c_t is not allowed to block SIGKILL or SIGSTOP This
- is done silently by the system.
-
- RREETTUURRNN VVAALLUUEESS
- A 0 value indicated that the call succeeded. A -1 return value indicates
- an error occurred and _e_r_r_n_o is set to indicated the reason.
-
- EERRRROORR
- SSiiggaaccttiioonn() will fail and no new signal handler will be installed if one
- of the following occurs: Either _a_c_t or _o_a_c_t points to memory that is not
- a valid part of the process address space. _S_i_g is not a valid signal
- number. An attempt is made to ignore or supply a handler for _S_I_G_K_I_L or
- SIGSTOP
-
- SSTTAANNDDAARRDD
- The ssiiggaaccttiioonn function is defined by IEEE Std1003.11988 (``POSIX''). The
- SA_ONSTACK and SA_RESTART flags are Berkeley extensions, as are the sig
- nals, SIGTRAP, SIGEMT, SIGBUS, SIGSYS, SIGURG, SIGIO, SIGXCPU, SIGXFSZ,
- SIGVTALRM, SIGPROF, SIGWINCH, and SIGINFO. Most of those signals are
- available on most BSD-derived systems.
-
- SSEEEE AALLSSOO
- kill(1), ptrace(2), kill(2), sigaction(2), sigprocmask(2), _s_i_g_s_e_t_o_p_s
- _2, sigsuspend(2), sigblock(2), sigsetmask(2), sigpause(2),
- sigstack(2), sigvec(2), setjmp(3), _s_i_g_i_n_t_e_r_r_u_p_t _3, tty(4)
-
- EEXXAAMMPPLLEE
- On a VAX-11, the handler routine can be declared:
-
- void handler(sig, code, scp)
- int sig, code;
- struct sigcontext *scp;
-
- Here _s_i_g is the signal number, into which the hardware faults and traps
- are mapped as defined below. _C_o_d_e is a parameter that is either a con
- stant as given below or the code provided by the hardware (Compatibility
- mode faults are distinguished from the other SIGILL traps by having
- PSL_CM set in the psl). _S_c_p is a pointer to the _s_i_g_c_o_n_t_e_x_t structure
- (defined in <_s_i_g_n_a_l_._h>), used to restore the context from before the sig
- nal.
-
- BSD Experimental July 23, 1991 3
-
-
-
-
-
-
-
-
-