我是Unix中通过C进行信号处理的新手,我一直在寻找一些关于它的教程(出于纯粹的兴趣).
我的问题是,是否有可能在处理信号之后继续执行程序?
我知道信号处理功能可以进行清理,但是在异常处理的精神下(例如在C++中),是否可以以相同的方式处理该信号并使程序继续正常运行?
目前catch进入一个无限循环(可能是一种退出的方式是打电话exit(1)).
我的意图b是分配1并使程序优雅地完成(如果可能的话).
这是我的代码:
#include <signal.h>
#include <stdio.h>
int a = 5;
int b = 0;
void catch(int sig)
{
printf("Caught the signal, will handle it now\n");
b = 1;
}
int main(void)
{
signal(SIGFPE, catch);
int c = a / b;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
另外,由于C是程序性的,为什么在执行后者之后实际调用了有问题的语句之前声明的信号处理程序?
最后,为了使处理函数能够正确地进行清理,所有在异常情况下需要清理的变量都需要在函数之前声明,对吧?
如果上面的一些内容非常明显,请提前感谢您的回答和道歉.