C++学习笔记(10)-信号处理&多线程
2017-09-15 16:49
411 查看
信号处理
C++信号处理主要用来捕捉系统产生的异常信号之后进行处理,它的头文件是#include <csignal>
C++主要是靠signal()函数来捕获异常信号,signal()函数能够捕获的异常信号包括如下信号:
信号标识符 | 说明 |
---|---|
SIGILL | 检测非法指令 |
SIGINT | 接收到交互注意信号 |
SIGFPE | 错误的算术运算,比如除以零或导致溢出的操作 |
SIGSEGV | 非法访问内存 |
SIGTERM | 发送到程序的终止请求 |
SIGABRT | 程序的异常终止,如调用 abort。 |
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.
相关文章推荐
- 传智博客学习笔记10--多线程
- C++/GDI+ 学习笔记(一)——安装、配置&使用
- C++学习笔记:extern &amp; static
- C++学习笔记之"类和对象I"
- C++学习的一些笔记-->1:C++ iostream和iostream.h的区别
- 标准C++复习&学习笔记
- C/C++学习笔记2 - cin深入分析(上) - cin输入操作处理(原创)
- C++ 学习笔记10
- Android深入浅出学习笔记之多线程及异步处理
- c++学习笔记--引用&
- Android开发学习笔记(8):浅谈Handler实现多线程和异步处理
- MPEG4 & H.264学习笔记之三 ------ 图像模型(图像处理过程)
- C++学习序列笔记之数据处理(复合类型)
- [Linux学习笔记]信号处理
- Pro visual c++/cli and .net 2.0 platform2 学习笔记(10 第四章 高级C++/CLI)
- c++学习笔记序列之经典处理程序汇总(不断更新中)
- C/C++学习笔记3 - cin深入分析(下) - cin的错误处理(原创)
- c++学习系列笔记之数据处理(总括)
- c++多线程学习7信号
- C++学习的一些笔记-->2:防止头文件多次导入造成重复编译的方法