关注分享主机优惠活动
国内外VPS云服务器

linux核心是什么意思?

本文主要介绍“linux核心是什么意思?”主机频道通过实际案例向你展示操作流程。操作方法简单、快捷、实用。希望这篇文章《linux核心是什么意思?可以帮你解决问题。

在linux中,核心意味着内存。当程序运行中异常程序异常退出时,系统将程序当前的内存状态存储在一个核心文件中,称为core dumped,意思是信息转储。当操作系统检测到当前进程异常时,会通过信号的方式将相应的错误信息告知目标进程。常见的信号有SIGSEGV、SIGBUS等。默认情况下,当进程接收到相应的信号时,它有一个相应的处理机制。

Linux下的开发中,我们经常听到程序员说我的程序核心掉了。通常这类问题是内存访问越界,使用空指针,堆栈溢出等等低级bug。使程序在运行过程中异常退出或终止。如果满足这些条件,将生成核心文件。

Coredump为什么会发生?

核心就是记忆。这个词来源于很久以前制造记忆的材料,一直沿用到现在。当程序运行过程中异常程序异常退出时,系统将程序当前的内存状态存储在一个核心文件中,称为核心转储,即信息转储。当操作系统检测到当前进程异常时,它会通过信号的方式将相应的错误信息通知给目标进程。常见的信号有SIGSEGV、SIGBUS等。默认情况下,进程接收相应的信号。

以Linux为例,Action对应的是信号处理方式,红框标记为常用信号。

linux core指的是什么

在此之前,最好了解一下进程的内存布局。Unix和Linux系统的进程空间布局会略有不同,内核空间会比Linux小,尤其是内核和用户进程采用分离的地址空间模式。以Linux为例:

linux core指的是什么

核心转储文件的存储位置。

我们知道,在Linux系统中,如果一个进程崩溃,系统内核会捕获进程崩溃的信息,然后将进程的coredump的信息写入一个文件,文件名默认为core。存储位置与对应的可执行程序在同一个目录下,文件名为core。您可以通过以下命令查看核心文件的位置:

linux core指的是什么4 Core_pattern的格式:

转储进程得% p PID % u % u(数字)实际UID%G转储进程得%G(数字)实际GID% s转储进程得% t转储时间,以秒表示% h自1970年1月1日00:00:00 +0000(UTC)以来得主机名(以及uname(2)返回得节点名).% c崩溃期间核心文件大小的软资源限制(从Linux 2.6.24开始)

以下程序可用于演示/proc/sys/kernel/core_pattern文件中管道语法的用法。

# include & ltsys/stat . h & gt;
# include & ltfcntl.h & gt
# include & lt限制. & gt
# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & ltunistd.h & gt

#定义缓冲区大小1024

Int main(int argc,char * argv-6——下面是配置永久核心的方法。只要内存访问越界,就会使用空指针、堆栈溢出等。,可以在这个目录下查看。

配置核心

1.首先,在根目录中创建一个用于存储coredump文件的文件夹。该命令如下所示:

Mkdir /corefile2。设置生成的核心转储文件的大小。该命令如下所示:

乌尔米特-c无限3。执行以下两个命令:

echo " 1 " >;/proc/sys/kernel/core _ uses _ PID//将1写入该文件。
echo "/corefile/core-% e-% p-% t " & gt;/proc/sys/kernel/core_pattern会将coredump生成的格式写入core_pattern文件中,这样在生成coredump时,就会以这种格式直接存储在根目录下的文件夹corefile中。

4.修改配置文件/etc/profile

Vim /etc/profile添加ulimit-S-c unlimited >/dev/null 2 & gt;& amp一个

linux core指的是什么

执行命令使文件生效。

linux core指的是什么5.在配置文件/etc/rc.local的末尾添加信息(该命令将在机器重新启动时自动加载):Add命令:

机器重启后清空此文件夹。因为生成的coredump文件非常大,如果不清空,硬盘会很长时间都是满的;

然后执行以下两个命令:

echo " 1 " >;/proc/sys/kernel/core_uses_pid
echo "/corefile/core-% e-% p-% t " & gt;/proc/sys/kernel/core _ pattern test让我们写一个例子来测试corefile文件是否配置好了。

# include & ltstdio.h & gtInt main(int argc,char *argvlinux core指的是什么输入之前创建的corefile文件夹:

linux core指的是什么1核心文件的出现表明核心转储配置的完成。您可以使用readelf命令来确定它是否是核心文件:

linux core指的是什么

运行gdb读取核心文件,命令为“gdb程序对应coredump文件”,然后输入gdb的提示符“(gdb)”。

linux core指的是什么

从红框截图可以看出,程序因为信号11而停止。

您可以通过下面的bt(backtrace)命令(或where)查看该函数的调用堆栈:

linux core指的是什么1也就是程序执行到test.cpp的第六行时发生了一个段错误原因是它指向了一个空指针。

未经允许不得转载:主机频道 » linux核心是什么意思?

评论 抢沙发

评论前必须登录!