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文件,这会给磁盘带来消耗并且可能危及到操作系统,所有服务器一般是将这个功能关闭的,若是用户在有需要的时候可以将其开启!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值