截取 SIGSEGV 将不会产生 core dump 文件

本文探讨了Linux环境下,不同处理SIGSEGV信号的方式如何影响core dump文件的生成。实验显示,不捕获SIGSEGV时,系统会生成core dump;捕获并调用exit()则不会生成;而在信号处理函数中恢复默认处理并让信号再次触发,会触发core dump生成。忽略SIGSEGV信号的行为与默认处理相同,仍会产生core dump。
摘要由CSDN通过智能技术生成

最近做了个实验验证 signal 和 core dump 的关系,用的是glibc

1) 不截取 SIGSEGV , 系统会产生 core dump 文件 (注意:不要忘了设置 ulimit -c unlimited)

2) 截取 SIGSEGV, 并调用 exit(), 就不会产生 core dump 文件 (如下面代码所示)

       不调用 exit(), 就会不停地调用 crashHandler,因为信号没有被处理

3) 在 crashHandler,最后不调用 exit(), 而是调用  signal(SIGSEGV, SIG_DFL);

    处理过程是这样: a: 打印 stack, 恢复 SIGSEGV 缺省处理, b, 第二次按系统缺省方式处理 SIGSEGV: 产生core dump 文件, 程序退出

4)SIG_IGN 无效,和 SIG_DFL一样都产生 core dump 文件

      就是说 signal(SIGSEGV, SIG_IGN); 等价   signal(SIGSEGV, SIG_DFL)


#include <execinfo.h>
#include <signal.h>
static void crashHandler(int sig)
{

    signal(SIGSEGV, SIG_IGN);
    size_t size;
    char **strings;
    size_t i, j;
    void *array[10];

    size
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值