【发布时间】:2013-01-09 10:44:03
【问题描述】:
我是通过 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 是过程性的,为什么在违规语句执行后实际上调用了在违规语句之前声明的信号处理程序?
最后,为了让处理函数正确地进行清理,所有在发生异常时需要清理的变量都需要在函数之前声明,对吧?
如果上述某些内容非常明显,请提前感谢您的回答和道歉。
【问题讨论】:
-
常见用例:许多(守护进程)进程可以处理
SIGHUP信号,这使得它们重新加载配置文件。