ISO-compliant implementation of signals
supported by the signal() function in the C
library and additional type arguments
Table 11 shows
the signals supported by the signal() function.
It also shows which signals use an additional argument to give more
information about the circumstance in which the signal was raised.
The additional argument is given in the type parameter
of __raise(). For example, division by floating-point
zero results in a SIGFPE signal with a corresponding
additional argument of FE_EX_DIVBYZERO.
Table 11. Signals supported by the signal() function
| Signal | Number | Description | Additional argument |
|---|
| SIGABRT | 1 | Returned when any untrapped exception
is thrown, such as: This
signal is only used if abort() or assert() are
called by your C++ application, and --exceptions is
specified. | None |
| SIGFPE | 2 | Used to signal any arithmetic exception, for
example, division by zero. Used by hard and soft floating-point
and by integer division. | A set of bits from FE_EX_INEXACT, FE_EX_UNDERFLOW, FE_EX_OVERFLOW, FE_EX_DIVBYZERO, FE_EX_INVALID, DIVBYZERO [] |
| SIGILL [] | 3 | Illegal instruction. | None |
| SIGINT [] | 4 | Attention request from user. | None |
| SIGSEGV [] | 5 | Bad memory access. | None |
| SIGTERM [] | 6 | Termination request. | None |
| SIGSTAK | 7 | Obsolete. | None |
| SIGRTRED | 8 | Redirection failed on a runtime library input/output
stream. | Name of file or device being re-opened to redirect
a standard stream |
| SIGRTMEM | 9 | Out of heap space during initialization or
after corruption. | Size of failed request |
| SIGUSR1 | 10 | User-defined. | User-defined |
| SIGUSR2 | 11 | User-defined. | User-defined |
| SIGPVFN | 12 | A pure virtual function was called from C++. | - |
| SIGCPPL | 13 | Not normally used. | - |
| SIGOUTOFHEAP [] | 14 | Returned by the C++ function ::operator
new when out of heap space. | Size of failed request |
| reserved | 15-31 | Reserved. | Reserved |
| other | > 31 | User-defined. | User-defined |
Although SIGSTAK exists
in signal.h, this signal is not generated by
the C library and is considered obsolete.
A signal number greater than SIGUSR2 can
be passed through __raise() and caught by the default
signal handler, but it cannot be caught by a handler registered
using signal().
signal() returns an error code if you
try to register a handler for a signal number greater than SIGUSR2.
The default handling of all recognized signals is to print
a diagnostic message and call exit(). This
default behavior applies at program startup and until you change
it.
Caution
The IEEE 754 standard for floating-point processing states
that the default action to an exception is to proceed without a
trap. A raised exception in floating-point calculations does not, by
default, generate SIGFPE. You
can modify floating-point error handling by tailoring the functions
and definitions in fenv.h. However, you must
compile these functions with a non-default FP model, such as --fpmode=ieee_fixed and
upwards.
For all the signals in Table 11, when a signal occurs, if the handler
points to a function, the equivalent of signal(sig, SIG_DFL) is
executed before the call to the handler.
If the SIGILL signal is
received by a handler specified to by the signal() function,
the default handling is reset.
See also
- Concepts
- Reference
ARM
C and C++ Libraries and Floating-Point Support Reference:
Compiler Reference:
- Other information