linux 浮点异常,浮点异常核心转储
我是Linux信号的新手,请帮忙.在Linux 2.6 gcc中运行时,以下代码会获取核心转储.$./每年浮点异常(核心已转储)问题:1.由于已安装过程信号屏蔽,因此不应由第40行的volatile int z = x / y生成的“ SIGFPGE”;被封锁?2.如果未阻塞,则由于已经安装了信号处理程序,信号处理程序是否应该捕获“ SIGFPE”而不是内核转储?3.如果我注释掉第40行volat
我是Linux信号的新手,请帮忙.
在Linux 2.6 gcc中运行时,以下代码会获取核心转储.
$./每年
浮点异常(核心已转储)
问题:
1.由于已安装过程信号屏蔽,因此不应由第40行的volatile int z = x / y生成的“ SIGFPGE”;被封锁?
2.如果未阻塞,则由于已经安装了信号处理程序,信号处理程序是否应该捕获“ SIGFPE”而不是内核转储?
3.如果我注释掉第40行volatile int z = x / y ;,并使用第42行raise(SIGFPE);相反,一切都会按我的预期进行. x / 0和在此处提高SIGFPE有什么区别?
这是代码:
#include
#include
#include
void sig_handler(int signum)
{
printf("sig_handler() received signal %d
", signum);
}
int main(int argc, char * argv[])
{
// setup signal mask, block all signals
sigset_t set;
sigfillset(&set);
if(sigprocmask(SIG_BLOCK, &set, NULL)<0)
{
perror("failed to set sigmask");
return -1;
}
// install signal handler for SIGFPE
struct sigaction act;
act.sa_handler = sig_handler;
act.sa_mask = set;
act.sa_flags = 0;
if(sigaction( SIGFPE, &act, NULL)<0)
{
perror("sigaction failed");
exit(-1);
}
volatile int x =1;
volatile int y =0;
volatile int z = x/y; //line 40
//raise(SIGFPE); //line 42
printf("point 1000
");
return 0;
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)