C++学习笔记(10)-信号处理&多线程

信号处理

C++信号处理主要用来捕捉系统产生的异常信号之后进行处理,它的头文件是
#include
C++主要是靠signal()函数来捕获异常信号,signal()函数能够捕获的异常信号包括如下信号:

信号标识符 说明
SIGILL 检测非法指令
SIGINT 接收到交互注意信号
SIGFPE 错误的算术运算,比如除以零或导致溢出的操作
SIGSEGV 非法访问内存
SIGTERM 发送到程序的终止请求
SIGABRT 程序的异常终止,如调用 abort。

C++ 信号处理库提供了 signal 函数,用来捕获突发事件。以下是 signal() 函数的语法:
void (*signal (int sig, void (*function)(int)))(int);
注意function函数的传入参数是int类型的
例子

#include 
#include 

using namespace std;

void chuli(int signum)
{
    cout << "已捕捉到信号(" << signum << ") received.\n";

    exit(signum);

}

int main()
{
    // 注册信号 SIGINT 和信号处理程序  SIGINT信号不能够换成其他的,不然CTRL+C程序无法捕捉
    signal(SIGINT, chuli);

    while (1) {
        cout << "hello" << endl;
    }

    return 0;
}

结果

hello
hello
hello
hello
hello
hello
hello
已捕捉到信号(2) received.

可以使用 raise(SIG) 生成一个信号,

int raise (signal sig);  //其中的sig可以是上述表格中的任何一个

例子:

#include 
#include 

using namespace std;

void chuli(int signum)
{
    cout << "已捕捉到信号(" << signum << ") received.\n";

    exit(signum);

}
void chuli2(int signum)
{
    cout << "已捕捉到信号ILL(" << signum << ") received.\n";

    exit(signum);

}
int main()
{
    int a=1;
    // 注册信号 SIGINT 和信号处理程序
    signal(SIGINT, chuli);
    signal(SIGILL, chuli2);
    while (a++) {
        cout << "hello" << endl;
        if(a == 5)
            raise(SIGILL);
    }

    return 0;
}

结果:

hello
hello
hello
hello
已捕捉到信号ILL(4) received.

你可能感兴趣的:(C++)