Core dump(核心转储)

文章目录


core dump

进程退出时有三种情况正常退出,退出结果不对,异常退出
在这里插入图片描述

低7位表示收到信号退出,次低八位代表进程正常退出它的退出码!在第八位有一个core dump标志位,这个标志位表示进程收到信号做的动作,是core还是term,一般默认为终止或者暂停

用man 7 signal查看
在这里插入图片描述
Term 和 Core表示收到信号的动作是终止进程。

测试core dump

#include<cstdlib>
#include<unistd.h>
#include<signal.h>
#include<string>
#include <sys/wait.h>
#include<sys/types.h>

using namespace std;
int main()
{


int id = fork();
    if(id == 0)
    {
        //child
        int cnt = 500;
        while(cnt)
        {
            cout << "i am a child process, pid: " << getpid() << "cnt: " << cnt << endl;
            sleep(1);
            cnt--;
        }

        exit(0);
    }

    // father
    int status = 0;
    pid_t rid = waitpid(id, &status, 0);
    if(rid == id)
    {
        cout << "child quit info, rid: " << rid << " exit code: " << 
            ((status>>8)&0xFF) << " exit signal: " << (status&0x7F) <<
                " core dump: " << ((status>>7)&1) << endl; // ? & (0000 0000 ... 0001)
    }

}

将退出码收到信号和core dump打印出来查看,然后通过kill向进程发送信号
在这里插入图片描述
发送2号信号core dump是0没问题,因为它的默认动作是term,但是发送8号信号core dump还是0,8号信号默认动作是core dump,出现这样的现象是因为我这是云服务器,云服务器对于core dump功能是关闭的,虚拟机对于core dump的功能是开启的!
设置core dump
那么如何将core dump开启,可以通过ulimit -a 查看系统配置
其中有一个
在这里插入图片描述
查看core文件大小 ulimit -c

在这里插入图片描述

core 文件大小是0,这个就是core dump功能的文件,他类型是blocks,若是要将其开启,只需要对这个文件设置大小即可。
ulimit -c +想要设置的大小
在这里插入图片描述
这样就把core dump功能打开了,一般普通用户是设置不了的,没有权限这样就要sudo提权再设置!若是要关闭core dump只需要将这个core 文件大小设置为0就可以了或者重启xshell
在这里插入图片描述
把core dump打开并运行程序向进程发送8号信号查看结果
在这里插入图片描述

可以发现此时core dump标志位变为了1
并且在当前目录形成了一个很大的core.进程pid文件这个文件中存放的是进程出异常的信息。
打开文件core dump功能,一旦进程出异常了,操作系统会将进程在内存中的运行信息给我dump(转储)到进程的当前目录中(磁盘),形成core。pid文件,这样的功能为:核心转储(core dump)

那么为什么要进行核心转储?

这是因为可以方便事后调试!因为程序出错,这样的错误是运行时错误,一个程序崩掉了,就可能想知道是怎么错的或者是什么时候出错的,或者在哪一行出错的,就可以通过core
dump查看这些错误信息

,core dump提供在运行时出错了的信息给我们查看,之后再让对应程序以可调试的方式运行,然后再启动gdb调试,直接输入core 文件就可以知道程序的出错原因!

在这里插入图片描述
把文件导入会直接定位到出错原因!
core文件中存储了程序出错的原因!core dump功能方便事后调试。这个功能可以用在以后程序出错,实在是找不到bug的时候,可以使用core 方式它可以直接复现问题之后直接定位到出错行,先运行再core-file,这样是事后调试等到程序崩溃了再调试!
那么为什么云服务器要关闭core dump呢?

因为每次core
dump都i形成一个core.pid文件这个文件夹并且还是很大的,若是一个服务器中出现大量程序错误,然后形成大量的core文件,这会给磁盘带来消耗并且可能危及到操作系统,所有服务器一般是将这个功能关闭的,若是用户在有需要的时候可以将其开启!

相关推荐

  1. Python3 如何定位错误:段错误 (核心)

    2024-04-22 07:08:07       58 阅读
  2. python sqlserver 数据表和恢复

    2024-04-22 07:08:07       60 阅读
  3. GRUB故障——/etc/kdump.conf指定故障分区

    2024-04-22 07:08:07       32 阅读
  4. 使用logrotate对日志文件进行

    2024-04-22 07:08:07       45 阅读
  5. 【OceanBase 系列】—— 什么是冻结和

    2024-04-22 07:08:07       43 阅读
  6. Linux内核 -- 用户态coredump处理之do_coredump函数

    2024-04-22 07:08:07       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-22 07:08:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-22 07:08:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-22 07:08:07       87 阅读
  4. Python语言-面向对象

    2024-04-22 07:08:07       96 阅读

热门阅读

  1. 搜索+剪枝,LeetCode 216. 组合总和 III

    2024-04-22 07:08:07       33 阅读
  2. 【iOS安全】iOS ARM汇编

    2024-04-22 07:08:07       37 阅读
  3. 组合总和(Lc39)——排序+剪枝+回溯

    2024-04-22 07:08:07       31 阅读
  4. 【无标题】axios的ts封装,记录一下(Vue3项目)

    2024-04-22 07:08:07       26 阅读
  5. STM32相关手册

    2024-04-22 07:08:07       30 阅读
  6. 搜索引擎中的倒排索引是什么

    2024-04-22 07:08:07       37 阅读
  7. 【数据结构】冒泡排序

    2024-04-22 07:08:07       35 阅读
  8. docker安装mysql,允许远程连接

    2024-04-22 07:08:07       35 阅读
  9. React Router 6 路由重定向与编程式导航指南

    2024-04-22 07:08:07       33 阅读