This facility has been retained from the Base Document since the Committee felt it important to provide some standard mechanism for dealing with exceptional program conditions. Thus a subset of the signals defined in UNIX were retained in the Standard, along with the basic mechanisms of declaring signal handlers and (with adaptations, see §22.214.171.124) raising signals. For a discussion of the problems created by including signals, see §2.2.3.
The signal machinery contains many misnomers:
have their roots in PDP-11 hardware terminology,
but the names are too entrenched to change.
(The occurrence of
SIGFPE, for instance, does not necessarily
indicate a floating-point error.)
A conforming implementation is not required to field
any hardware interrupts.
The Committee has reserved the space of names beginning with
SIG to permit implementations to add local names to
This implies that such names should not be otherwise used in
a C source file which includes
When a signal occurs
the normal flow of control of a program is interrupted.
If a signal occurs that is being trapped by a signal handler,
that handler is invoked.
When it is finished, execution continues at the
point at which the signal occurred.
This arrangement could cause problems if the
signal handler invokes a library function that was being executed at the
time of the signal.
Since library functions are not guaranteed to be re-entrant,
they should not be called from a signal handler that returns.
A specific exception to this rule has been granted for calls to
signal from within the signal handler;
otherwise, the handler could not reliably reset the signal.
The specification that some signals may be effectively set to
SIG_IGN instead of
SIG_DFL at program startup
allows programs under UNIX systems to
inherit this effective setting from parent processes.
For performance reasons, UNIX does not reset
SIGILL to default handling when the handler
is called (usually to emulate missing instructions).
This treatment is sanctioned by specifying that whether
reset occurs for
raisereplaces the Base Document's
killfunction. The latter has an extra argument which refers to the ``process ID'' affected by the signal. Since the execution model of the Standard does not deal with multi-processing, the Committee deemed it preferable to introduce a function which requires no (dummy) process argument. The Committee anticipates that IEEE 1003 will wish to standardize the
killfunction in the POSIX specification.