gpt4 book ai didi

linux - SIGFPE 信号不终止并生成核心文件

转载 作者:太空宇宙 更新时间:2023-11-04 08:59:50 29 4
gpt4 key购买 nike

根据 UNIX 高级编程文档,SIGFPE 信号终止程序并生成核心文件。

这是我的程序

#include <unistd.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>

static void sig_fpe(int signo);

int
main()
{
int pid;

if(signal(SIGFPE, sig_fpe) == SIG_ERR)
printf("Signal error\n");

pid = 10;
pid = pid / 0;

exit(0);
}

static void
sig_fpe(int signo)
{
if(signo == SIGFPE){

printf("SIGFPE signal catch\n");
}
}

当我在 linux 机器上运行这个程序时,它反复打印“SIGFPE signal catch”并且没有终止。样本输出是

SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
SIGFPE signal catch
.
.
.
.

问题是什么?

最佳答案

SIGFPE 有点棘手。当 SIGFPE 被捕获时,如果您只是从处理程序返回,指令将被重新执行 - 这非常依赖于平台,但信号的手册页提到了未定义的行为。

参见此处:Unix signals doubt - on the execution of the below progem

如果您还需要核心文件,则需要重新安装默认信号处理程序,请参阅 Linux: handling a segmentation fault and getting a core dump , 并启用核心文件(在 Unix 上使用 ulimit -c ... 完成)

关于linux - SIGFPE 信号不终止并生成核心文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23669639/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com