Unix signals provide the ability to interrupt a given process, and allow a child to receive this interruption and handle it any way they wish.
Specifically, Unix signals provide the user with the ability to handle specific types of control flow and errors that might occur, such as a Terminal attempting to close your program, or a segmentation fault that might be recoverable.
See the following example:
#include <unistd.h>
#include <iostream>
int main(void)
{
while(true) {
std::cout << "Hello World\n";
sleep(1);
}
}
// > g++ scratchpad.cpp; ./a.out
// Hello World
// Hello World
// Hello World
// ...
// ^C
In the preceding example, we create a process that executes forever, outputting Hello World every second. To stop this application, we must use the CTRL+C command, which tells the shell to terminate the process. This is done...