我是通過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'信號,使它們重新加載配置文件。 –