参考:https://www.runoob.com/cplusplus/cpp-signal-handling.html
1.相关头文件<csignal>
2.信号处理的本质:注册回调
用函数signal注册一个对应信号sig的处理函数,当程序在此后运行时,收到该信号就会去回调这个信号处理函数。
3.信号从哪里来?
可以自己在程序中raise sig;
与可以是系统给出。
4.有哪些信号?
在头文件csignal中查看。
常见的有:
信号 描述
SIGABRT 程序的异常终止,如调用 abort。
SIGFPE 错误的算术运算,比如除以零或导致溢出的操作。
SIGILL 检测非法指令。
SIGINT 接收到交互注意信号。
SIGSEGV 非法访问内存。
SIGTERM 发送到程序的终止请求。
5.signal 与 raise原型:
void (*signal (int sig, void (*func)(int)))(int);
int raise (signal sig);
6.示例:
描述:先raise 一个SIGINT,后Ctrl+C,让OS给SIGINT到该进程。
注意:注册一次,信号只能处理一次。
void SIGINT_Handler(int sig)
{
static uint8_t count = 0;
cout << "I am SIGINT_Handler" << endl;
if( count++ < 2 )
signal(SIGINT, SIGINT_Handler); //连续处理信号
}
int main(int argc, char **argv)
{
signal(SIGINT, SIGINT_Handler);
raise(SIGINT);
while (true)
{
Sleep(1000);//windows下的S要大写
cout << "in while" << endl;
}
return 0;
}