Defined in header <signal.h> | ||
---|---|---|
void (*signal( int sig, void (*handler) (int))) (int); |
Sets the error handler for signal sig
. The signal handler can be set so that default handling will occur, signal is ignored, or a user-defined function is called.
When signal handler is set to a function and a signal occurs, it is implementation defined whether signal(sig, SIG_DFL)
will be executed immediately before the start of signal handler. Also, the implementation can prevent some implementation-defined set of signals from occurring while the signal handler runs.
sig | - | the signal to set the signal handler to. It can be an implementation-defined value or one of the following values:
|
|||
handler | - | the signal handler. This must be one of the following:
|
Previous signal handler on success or SIG_ERR
on failure (setting a signal handler can be disabled on some implementations).
The following limitations are imposed on the user-defined function that is installed as a signal handler.
If the user defined function returns when handling SIGFPE
, SIGILL
or SIGSEGV
, the behavior is undefined.
If the signal handler is called as a result of abort
or raise
, the behavior is undefined if the signal handler calls raise
.
If the signal handler is called NOT as a result of abort
or raise
(in other words, the signal handler is asynchronous), the behavior is undefined if.
abort
_Exit
quick_exit
signal
with the first argument being the number of the signal currently handled (async handler can re-register itself, but not other signals). <stdatomic.h>
if the atomic arguments are lock-free atomic_is_lock_free
(with any kind of atomic arguments) volatile sig_atomic_t
. On entry to the signal handler, the state of the floating-point environment and the values of all objects is unspecified, except for.
volatile sig_atomic_t
atomic_signal_fence
(since C11) On return from a signal handler, the value of any object modified by the signal handler that is not volatile sig_atomic_t
or lock-free atomic(since C11) is undefined.
The behavior is undefined if signal
is used in a multithreaded program. It is not required to be thread-safe.
POSIX requires that signal
is thread-safe, and specifies a list of async-signal-safe library functions that may be called from any signal handler.
Besides abort
and raise
, POSIX specifies that kill
, pthread_kill
, and sigqueue
generate synchronous signals.
POSIX recommends sigaction
instead of signal
, due to its underspecified behavior and significant implementation variations, regarding signal delivery while a signal handler is executed.
#include <signal.h> #include <stdio.h> volatile sig_atomic_t gSignalStatus; void signal_handler(int signal) { gSignalStatus = signal; } int main(void) { signal(SIGINT, signal_handler); printf("SignalValue: %d\n", gSignalStatus); printf("Sending signal: %d\n", SIGINT); raise(SIGINT); printf("SignalValue: %d\n", gSignalStatus); }
Output:
SignalValue: 0 Sending signal: 2 SignalValue: 2
runs the signal handler for particular signal (function) |
|
C++ documentation for signal |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/program/signal