您的位置:首页 > 编程语言 > C语言/C++

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

2017-09-15 16:49 411 查看

信号处理

C++信号处理主要用来捕捉系统产生的异常信号之后进行处理,它的头文件是

#include <csignal>


C++主要是靠signal()函数来捕获异常信号,signal()函数能够捕获的异常信号包括如下信号:

信号标识符说明
SIGILL检测非法指令
SIGINT接收到交互注意信号
SIGFPE错误的算术运算,比如除以零或导致溢出的操作
SIGSEGV非法访问内存
SIGTERM发送到程序的终止请求
SIGABRT程序的异常终止,如调用 abort。
C++ 信号处理库提供了 signal 函数,用来捕获突发事件。以下是 signal() 函数的语法:

void (*signal (int sig, void (*function)(int)))(int);


注意function函数的传入参数是int类型的

例子

#include <iostream>
#include <csignal>

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 <iostream>
#include <csignal>

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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: