fbpx
Wikipedia

C signal handling

In the C Standard Library, signal processing defines how a program handles various signals while it executes. A signal can report some exceptional behavior within the program (such as division by zero), or a signal can report some asynchronous event outside the program (such as someone striking an interactive attention key on a keyboard).

Standard signals edit

The C standard defines only 6 signals. They are all defined in signal.h header (csignal header in C++):[1]

  • SIGABRT – "abort", abnormal termination.
  • SIGFPEfloating point exception.
  • SIGILL – "illegal", invalid instruction.
  • SIGINT – "interrupt", interactive attention request sent to the program.
  • SIGSEGV – "segmentation violation", invalid memory access.
  • SIGTERM – "terminate", termination request sent to the program.

Additional signals may be specified in the signal.h header by the implementation. For example, Unix and Unix-like operating systems (such as Linux) define more than 15 additional signals; see Unix signal.[2]

Debugging edit

  • SIGTRAP for debugging purposes. It's platform-dependent and may be used on Unix-like operating systems.

Handling edit

A signal can be generated by calling raise() or kill() system calls. raise() sends a signal to the current process, kill() sends a signal to a specific process.

A signal handler is a function which is called by the target environment when the corresponding signal occurs. The target environment suspends execution of the program until the signal handler returns or calls longjmp().

Signal handlers can be set with signal() or sigaction(). The behavior of signal() has been changed multiple times across history and its use is discouraged.[3] It is only portable when used to set a signal's disposition to SIG_DFL or SIG_IGN. Signal handlers can be specified for all but two signals (SIGKILL and SIGSTOP cannot be caught, blocked or ignored).

If the signal reports an error within the program (and the signal is not asynchronous), the signal handler can terminate by calling abort(), exit(), or longjmp().

Functions edit

Function Description
raise artificially sends a signal to the calling process
kill artificially sends a signal to a specified process
signal sets the action taken when the program receives a specific signal

Example usage edit

#include <signal.h> #include <stdio.h> #include <stdlib.h> volatile sig_atomic_t status = 0; static void catch_function(int signo) {  status = signo; } int main(void) {  // Set above function as signal handler for the SIGINT signal:  if (signal(SIGINT, catch_function) == SIG_ERR) {  fputs("An error occurred while setting a signal handler.\n", stderr);  return EXIT_FAILURE;  }  puts("Raising the interactive attention signal.");  if (raise(SIGINT)) {  fputs("Error raising the signal.\n", stderr);  return EXIT_FAILURE;  }  if (status == SIGINT) puts("Interactive attention signal caught.");  puts("Exiting.");  return EXIT_SUCCESS;  // exiting after raising signal } 

See also edit

References edit

  1. ^ ISO/IEC 9899:1999 specification (PDF). p. 258, § 7.14 Signal handling.
  2. ^ "The Open Group Base Specifications Issue 6 – signal.h – signals". Retrieved 10 January 2012.
  3. ^ https://man7.org/linux/man-pages/man2/signal.2.html Signal(2) manpage

signal, handling, standard, library, signal, processing, defines, program, handles, various, signals, while, executes, signal, report, some, exceptional, behavior, within, program, such, division, zero, signal, report, some, asynchronous, event, outside, progr. In the C Standard Library signal processing defines how a program handles various signals while it executes A signal can report some exceptional behavior within the program such as division by zero or a signal can report some asynchronous event outside the program such as someone striking an interactive attention key on a keyboard Contents 1 Standard signals 1 1 Debugging 2 Handling 3 Functions 4 Example usage 5 See also 6 ReferencesStandard signals editSee also Unix signal The C standard defines only 6 signals They are all defined in signal h header csignal header in C 1 SIGABRT abort abnormal termination SIGFPE floating point exception SIGILL illegal invalid instruction SIGINT interrupt interactive attention request sent to the program SIGSEGV segmentation violation invalid memory access SIGTERM terminate termination request sent to the program Additional signals may be specified in the signal h header by the implementation For example Unix and Unix like operating systems such as Linux define more than 15 additional signals see Unix signal 2 Debugging edit SIGTRAP for debugging purposes It s platform dependent and may be used on Unix like operating systems Handling editA signal can be generated by calling raise or kill system calls raise sends a signal to the current process kill sends a signal to a specific process A signal handler is a function which is called by the target environment when the corresponding signal occurs The target environment suspends execution of the program until the signal handler returns or calls longjmp Signal handlers can be set with signal or sigaction The behavior of signal has been changed multiple times across history and its use is discouraged 3 It is only portable when used to set a signal s disposition to SIG DFL or SIG IGN Signal handlers can be specified for all but two signals SIGKILL and SIGSTOP cannot be caught blocked or ignored If the signal reports an error within the program and the signal is not asynchronous the signal handler can terminate by calling abort exit or longjmp Functions editFunction Description raise artificially sends a signal to the calling process kill artificially sends a signal to a specified process signal sets the action taken when the program receives a specific signalExample usage edit include lt signal h gt include lt stdio h gt include lt stdlib h gt volatile sig atomic t status 0 static void catch function int signo status signo int main void Set above function as signal handler for the SIGINT signal if signal SIGINT catch function SIG ERR fputs An error occurred while setting a signal handler n stderr return EXIT FAILURE puts Raising the interactive attention signal if raise SIGINT fputs Error raising the signal n stderr return EXIT FAILURE if status SIGINT puts Interactive attention signal caught puts Exiting return EXIT SUCCESS exiting after raising signal See also editUnix signalReferences edit ISO IEC 9899 1999 specification PDF p 258 7 14 Signal handling The Open Group Base Specifications Issue 6 signal h signals Retrieved 10 January 2012 https man7 org linux man pages man2 signal 2 html Signal 2 manpage Retrieved from https en wikipedia org w index php title C signal handling amp oldid 1210700811, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.