Annotation of 43BSDReno/share/doc/ps1/06.sysman/1.3.t, revision 1.1

1.1     ! root        1: .\" Copyright (c) 1983 Regents of the University of California.
        !             2: .\" All rights reserved.  The Berkeley software License Agreement
        !             3: .\" specifies the terms and conditions for redistribution.
        !             4: .\"
        !             5: .\"    @(#)1.3.t       6.2 (Berkeley) 5/12/86
        !             6: .\"
        !             7: .sh "Signals
        !             8: .PP
        !             9: .NH 3
        !            10: Overview
        !            11: .PP
        !            12: The system defines a set of \fIsignals\fP that may be delivered
        !            13: to a process.  Signal delivery resembles the occurrence of a hardware
        !            14: interrupt: the signal is blocked from further occurrence,
        !            15: the current process context is saved, and a new one
        !            16: is built.  A process may specify
        !            17: the \fIhandler\fP to which a signal is delivered, or specify that
        !            18: the signal is to be \fIblocked\fP or \fIignored\fP.  A process may
        !            19: also specify that a
        !            20: \fIdefault\fP action is to be taken when signals occur.
        !            21: .PP
        !            22: Some signals
        !            23: will cause a process to exit when they are not caught.  This
        !            24: may be accompanied by creation of a \fIcore\fP image file, containing
        !            25: the current memory image of the process for use in post-mortem debugging.
        !            26: A process may choose to have signals delivered on a special
        !            27: stack, so that sophisticated software stack manipulations are possible.
        !            28: .PP
        !            29: All signals have the same \fIpriority\fP.  If multiple signals
        !            30: are pending simultaneously, the order in which they are delivered
        !            31: to a process is implementation specific.  Signal routines execute
        !            32: with the signal that caused their invocation \fIblocked\fP, but other
        !            33: signals may yet occur.  Mechanisms are provided whereby critical sections
        !            34: of code may protect themselves against the occurrence of specified signals.
        !            35: .NH 3
        !            36: Signal types
        !            37: .PP
        !            38: The signals defined by the system fall into one of
        !            39: five classes: hardware conditions,
        !            40: software conditions, input/output notification, process control, or
        !            41: resource control.
        !            42: The set of signals is defined in the file \fI<signal.h>\fP.
        !            43: .PP
        !            44: Hardware signals are derived from exceptional conditions which
        !            45: may occur during
        !            46: execution.  Such signals include SIGFPE representing floating
        !            47: point and other arithmetic exceptions, SIGILL for illegal instruction
        !            48: execution, SIGSEGV for addresses outside the currently assigned
        !            49: area of memory, and SIGBUS for accesses that violate memory
        !            50: protection constraints.
        !            51: Other, more cpu-specific hardware signals exist,
        !            52: such as those for the various customer-reserved instructions on
        !            53: the VAX (SIGIOT, SIGEMT, and SIGTRAP). 
        !            54: .PP
        !            55: Software signals reflect interrupts generated by user request:
        !            56: SIGINT for the normal interrupt signal; SIGQUIT for the more
        !            57: powerful \fIquit\fP signal, that normally causes a core image
        !            58: to be generated; SIGHUP and SIGTERM that cause graceful
        !            59: process termination, either because a user has ``hung up'', or
        !            60: by user or program request; and SIGKILL, a more powerful termination
        !            61: signal which a process cannot catch or ignore.
        !            62: Programs may define their own asynchronous events using SIGUSR1
        !            63: and SIGUSR2.
        !            64: Other software signals (SIGALRM, SIGVTALRM, SIGPROF)
        !            65: indicate the expiration of interval timers.
        !            66: .PP
        !            67: A process can request notification via a SIGIO signal
        !            68: when input or output is possible
        !            69: on a descriptor, or when a \fInon-blocking\fP operation completes.
        !            70: A process may request to receive a SIGURG signal when an
        !            71: urgent condition arises. 
        !            72: .PP
        !            73: A process may be \fIstopped\fP by a signal sent to it or the members
        !            74: of its process group.  The SIGSTOP signal is a powerful stop
        !            75: signal, because it cannot be caught.  Other stop signals
        !            76: SIGTSTP, SIGTTIN, and SIGTTOU are used when a user request, input
        !            77: request, or output request respectively is the reason for stopping the process.
        !            78: A SIGCONT signal is sent to a process when it is
        !            79: continued from a stopped state.
        !            80: Processes may receive notification with a SIGCHLD signal when
        !            81: a child process changes state, either by stopping or by terminating.
        !            82: .PP
        !            83: Exceeding resource limits may cause signals to be generated.
        !            84: SIGXCPU occurs when a process nears its CPU time limit and SIGXFSZ
        !            85: warns that the limit on file size creation has been reached.
        !            86: .NH 3
        !            87: Signal handlers
        !            88: .PP
        !            89: A process has a handler associated with each signal.
        !            90: The handler controls the way the signal is delivered.
        !            91: The call
        !            92: .DS
        !            93: #include <signal.h>
        !            94: 
        !            95: ._f
        !            96: struct sigvec {
        !            97:        int     (*sv_handler)();
        !            98:        int     sv_mask;
        !            99:        int     sv_flags;
        !           100: };
        !           101: 
        !           102: sigvec(signo, sv, osv)
        !           103: int signo; struct sigvec *sv; result struct sigvec *osv;
        !           104: .DE
        !           105: assigns interrupt handler address \fIsv_handler\fP to signal \fIsigno\fP.
        !           106: Each handler address
        !           107: specifies either an interrupt routine for the signal, that the
        !           108: signal is to be ignored,
        !           109: or that a default action (usually process termination) is to occur
        !           110: if the signal occurs.
        !           111: The constants
        !           112: SIG_IGN and SIG_DEF used as values for \fIsv_handler\fP
        !           113: cause ignoring or defaulting of a condition.
        !           114: The \fIsv_mask\fP value specifies the
        !           115: signal mask to be used when the handler is invoked; it implicitly includes
        !           116: the signal which invoked the handler.
        !           117: Signal masks include one bit for each signal;
        !           118: the mask for a signal \fIsigno\fP is provided by the macro
        !           119: \fIsigmask\fP(\fIsigno\fP), from \fI<signal.h>\fP.
        !           120: \fISv_flags\fP specifies whether system calls should be
        !           121: restarted if the signal handler returns and
        !           122: whether the handler should operate on the normal run-time
        !           123: stack or a special signal stack (see below).  If \fIosv\fP
        !           124: is non-zero, the previous signal vector is returned.
        !           125: .PP
        !           126: When a signal condition arises for a process, the signal
        !           127: is added to a set of signals pending for the process.
        !           128: If the signal is not currently \fIblocked\fP by the process
        !           129: then it will be delivered.  The process of signal delivery
        !           130: adds the signal to be delivered and those signals
        !           131: specified in the associated signal
        !           132: handler's \fIsv_mask\fP to a set of those \fImasked\fP
        !           133: for the process, saves the current process context,
        !           134: and places the process in the context of the signal
        !           135: handling routine.  The call is arranged so that if the signal
        !           136: handling routine exits normally the signal mask will be restored
        !           137: and the process will resume execution in the original context.
        !           138: If the process wishes to resume in a different context, then
        !           139: it must arrange to restore the signal mask itself.
        !           140: .PP
        !           141: The mask of \fIblocked\fP signals is independent of handlers for
        !           142: signals.  It delays signals from being delivered much as a
        !           143: raised hardware interrupt priority level delays hardware interrupts.
        !           144: Preventing an interrupt from occurring by changing the handler is analogous to
        !           145: disabling a device from further interrupts.
        !           146: .PP
        !           147: The signal handling routine \fIsv_handler\fP is called by a C call
        !           148: of the form
        !           149: .DS
        !           150: (*sv_handler)(signo, code, scp);
        !           151: int signo; long code; struct sigcontext *scp;
        !           152: .DE
        !           153: The \fIsigno\fP gives the number of the signal that occurred, and
        !           154: the \fIcode\fP, a word of information supplied by the hardware.
        !           155: The \fIscp\fP parameter is a pointer to a machine-dependent
        !           156: structure containing the information for restoring the
        !           157: context before the signal.
        !           158: .NH 3
        !           159: Sending signals
        !           160: .PP
        !           161: A process can send a signal to another process or group of processes
        !           162: with the calls:
        !           163: .DS
        !           164: kill(pid, signo)
        !           165: int pid, signo;
        !           166: 
        !           167: killpgrp(pgrp, signo)
        !           168: int pgrp, signo;
        !           169: .DE
        !           170: Unless the process sending the signal is privileged,
        !           171: it must have the same effective user id as the process receiving the signal.
        !           172: .PP
        !           173: Signals are also sent implicitly from a terminal device to the
        !           174: process group associated with the terminal when certain input characters
        !           175: are typed.
        !           176: .NH 3
        !           177: Protecting critical sections
        !           178: .PP
        !           179: To block a section of code against one or more signals, a \fIsigblock\fP
        !           180: call may be used to add a set of signals to the existing mask, returning
        !           181: the old mask:
        !           182: .DS
        !           183: oldmask = sigblock(mask);
        !           184: result long oldmask; long mask;
        !           185: .DE
        !           186: The old mask can then be restored later with \fIsigsetmask\fP\|,
        !           187: .DS
        !           188: oldmask = sigsetmask(mask);
        !           189: result long oldmask; long mask;
        !           190: .DE
        !           191: The \fIsigblock\fP call can be used to read the current mask
        !           192: by specifying an empty \fImask\fP\|.
        !           193: .PP
        !           194: It is possible to check conditions with some signals blocked,
        !           195: and then to pause waiting for a signal and restoring the mask, by using:
        !           196: .DS
        !           197: sigpause(mask);
        !           198: long mask;
        !           199: .DE
        !           200: .NH 3
        !           201: Signal stacks
        !           202: .PP
        !           203: Applications that maintain complex or fixed size stacks can use
        !           204: the call
        !           205: .DS
        !           206: ._f
        !           207: struct sigstack {
        !           208:        caddr_t ss_sp;
        !           209:        int     ss_onstack;
        !           210: };
        !           211: 
        !           212: sigstack(ss, oss)
        !           213: struct sigstack *ss; result struct sigstack *oss;
        !           214: .DE
        !           215: to provide the system with a stack based at \fIss_sp\fP for delivery
        !           216: of signals. The value \fIss_onstack\fP indicates whether the
        !           217: process is currently on the signal stack,
        !           218: a notion maintained in software by the system.
        !           219: .PP
        !           220: When a signal is to be delivered, the system checks whether
        !           221: the process is on a signal stack.  If not, then the process is switched
        !           222: to the signal stack for delivery, with the return from the signal
        !           223: arranged to restore the previous stack.
        !           224: .PP
        !           225: If the process wishes to take a non-local exit from the signal routine,
        !           226: or run code from the signal stack that uses a different stack,
        !           227: a \fIsigstack\fP call should be used to reset the signal stack.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.