测试环境:ubuntu 16.0
编译器: g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609 (查看版本指令:g++ --version)
以下为测试代码:
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <signal.h> 4 #include <iostream> 5 using namespace std; 6 7 //发现信号执行的方法 8 void SignalFunc(int sig_num) 9 { 10 switch (sig_num) 11 { 12 case SIGINT: 13 cout << "signal int" << endl; 14 exit(1); 15 break; 16 17 /*添加多个响应的事件 18 case SIGUSR1: 19 break; 20 */ 21 } 22 } 23 24 int main(int argc, char* argv[]) 25 { 26 //注册需要监听的信号 27 signal(SIGINT, SignalFunc); 28 29 //构造一个阻塞点 30 while (1) 31 { 32 cout << "waiting signal" << endl; 33 } 34 35 return 0; 36 }
代码执行效果:
reacher@ubuntu:~/projects/proj$./main
waiting signal
waiting signal
waiting signal
^C
waiting signal
signal int
当键盘按下ctrl+c+回车 执行中断,终端响应键盘中断,调用信号注册的的函数。