我是通过C在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;
}
此外,由于C是程序性的,怎么就违规语句之前声明的信号处理程序实际上是所谓后者已被执行之后?
最后,为了让处理函数能够正确地进行清理,在发生异常时需要清理的所有变量都需要在函数之前声明,对吧?
在此先感谢您的回答并道歉,如果上述某些内容非常明显。
常见用例:很多(守护进程)进程可以处理'SIGHUP'信号,使它们重新加载配置文件。 –