首先需要了解linux 里面信号是什么? 信号是消息的表现形式,消息是信号的内容。通俗来讲走是一个信号 ,停也是一个信号,ctrl +c 也是一个信号。信号来源于系统内核。而产生信号的请求则来源于三个地方:
1.用户:用户能够通过输入ctrl c ,ctrl -\,或者终端驱动程序分配给信号控制字符的其他键来请求内核产生信号。
2.系统内核:当进程执行出错时 内核将发送一个信号,例如 不合法的段存取,浮点数溢出,或者一个非法的机器指令,系统也将发出信号指定特定的事件发生。
3.进程:一个进程可以通过系统调用kill 给另一进程发送信号,两个进程间可以通过信号进行通信。
(由某个进程的某个操作产生的信号成为同步信号。进程外的事件引起的信号被称为异步信号)
中断信号:SIGINT 退出信号:SIGQUIT 非法段存取信号:SIGSEGV
信号的处理:当进程收到一个中断信号时 ,不一定非要消亡,进程能通过系统调用signal告诉内核他要如何处理该信号,通常有三个选择:
1.接收默认处理,即消亡。
2.通过signal(SIGINT,SIG_IGN). 也可以通过调用 signal(SIGINT,SIG_DFL)来恢复默认。
3.调用一个函数:下面为一个简单的例子:
1 #include<stdio.h>
2 #include<unistd.h>
3 #include<signal.h>
4 int main(){
5 int i;
6 void f(signum){
7
8 printf("调用成功!");
9 }
10 signal(SIGINT,f);
11 for(i=0;i<5;++i){
12
13 printf("hello\n");
14 sleep(1);
15 }
16 return 0;
17 }