我是通过 C 在 Unix 中处理信号的新手,我一直在看一些关于它的教程(出于纯粹的兴趣)。
我的问题是,是否可以在处理信号的点之后继续执行程序?
我知道信号处理函数会进行清理,但是本着异常处理的精神(例如在 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;
}
此外,由于 C 是程序性的,在违规语句之前声明的信号处理程序如何在后者执行后实际调用?
最后,为了让处理函数正确地进行清理,所有在发生异常时需要清理的变量都需要在函数之前声明,对吧?
如果上述某些内容非常明显,请提前感谢您的回答和道歉。