linux 的自定义signal处理函数为什么会不停的触发呀?
如下图所示,除以0的情况下,会触发SIGFPE信号,调用自定义的sig_fpe函数;那么为什么会不停的触发这个函数呀。不应该是只触发一次吗?
`
1 #include <iostream>
2 #include <unistd.h>
3 #include <linux/types.h>
4 #include <sys/types.h>
5 #include <signal.h>
6 using namespace std;
7 static void sig_fpe(int signo){
8 cout<<"sig fpe error "<<signo<<endl;
9 }
10
11 int main(){
12 signal(SIGFPE , sig_fpe);
13 int m = 1000/2;
14 return 0;
15 } `
首先,除以0是UB。
然后,当程序进入signal handler的时候,PC(指向除以0发生的instruction) 会被存起来。
你的handler会忽略对SIGFPE的处理(比如exit program)。
PC之后会还原(指向除以0发生的instruction),然后SIGFPE再次触发,然后。。。
看这里 https://linux.die.net/man/2/s...