Linux进程核心dump技术简介 (linux 进程 core)

Linux操作系统实现了进程核心dump技术,这使得在程序发生异常或者崩溃的情况下,能够将进程所在的状态快照存储下来,以供分析和重现。本文将对Linux进程核心dump技术进行简要介绍。

概述

进程dump是指将进程中的所有数据和状态信息以二进制文件的方式保存下来,通常也称为“核心转储”。这个核心转储可以在之后被加载回运行时内存中,以完成进程的状态复原和恢复。

在Linux系统中,进程dump包含了许多信息,包括以下内容:

1. 进程堆栈信息,包括调用链和寄存器状态等;

2. 进程映像信息,包括在进程内打开的所有文件,加载的硬件模块和、共享库等;

3. 进程内存信息,包括虚拟地址空间、内存单元的内容和状态等。

进程dump的目的是为了诊断问题或恢复系统状态。在出现问题的情况下,使用进程dump可以帮助开发人员深入了解问题的起因,以便进一步解决它。

进程dump技术

进程dump的实现需要使用操作系统的相关支持,从而能够访问和复制进程内存。Linux系统提供了GDB(GNU调试器)作为标准接口,使得使用进程dump技术变得更加容易。

下面是使用进程dump技术的步骤:

1. 准备一个进程——需要dump一个进程时,首先需要让该进程生成一个核心dump文件。在Linux上,可以使用ulimit命令来调整核心转储文件的大小和大小限制。

2. 为进程启用coredump——在Linux操作系统中,进程dump的行为受到了一定的安全限制。在默认情况下,进程dump被禁用。为了启用进程dump,需要在终端中执行以下命令:

ulimit -c unlimited

这个命令将生成一个大小不受限制的核心dump文件。

3. 检查coredump设置——使用命令”cat /proc/sys/kernel/core_pattern”,可以查看当前核心dump文件的位置和它的格式。如果你使用的GNU调试器版本早于7.0,则需要使用命令”echo /proc/sys/kernel/core_pattern > /dev/null”来启用核心dump。

4. 生成核心dump文件——当进程发生异常或崩溃时,将会生成一个核心dump文件,以供分析和重现问题。可以通过下面的命令来测试是否已经开始生成核心dump文件:

kill -SIGABRT [pid]

5. 分析核心dump文件——一旦生成核心dump文件,就可以使用GDB调试器来分析文件。使用GDB的命令“file core”,加载核心dump文件后,可以使用常规的GDB命令来分析它。

结论

进程dump技术是Linux操作系统中非常重要的一部分。它能够让开发人员在调试和诊断问题时更加高效和准确。本文简要介绍了Linux进程核心dump技术,介绍了它的实现和使用方式,以便更好地帮助开发人员解决问题。同时,读者也可以通过学习进程dump技术,更好地理解Linux操作系统内核和进程管理机制。

相关问题拓展阅读:

LINUX core怎么设置

放里面,记得在CMOS里面设置成光驱启动哟,然后就进入之一个画面了(由于LINUX安装时无法抓图,所以我用数码相机拍的,图片质量很差,请见谅。)

,版本不是问题,所有的LINUX安装差不多,出现几排字,上面是要你选择图形界面安装,或是文字界面安装,屏幕最下面有个BOOT:的提示符,在这里直接按回车就是图形安装,输入TEXT然后回车就是文字安装,建议你使用图形的界面进行安装,如果直接能够进入图形安装,说明你的显卡配置不成问题了,文字的其实也差不多,不同的是一个用鼠标一个用键盘而已,由于LINUX的版本很多,但是安装方法几乎相同,所以我这里就以REDHAT7。1的安装为例,向大家描述整个安装过程,如果你的是红旗,蓝点,或其他版本,中文的版本,也可以对照进行。

进入图形界面以后,先是语言选择画面,默认是英语,(靠,redhat这真他NN的不象话,就是没有Chinese选)

然后我们看看,是键盘设置,如果你的键盘不是很特别,一般就保持默认设置,直接选NEXT

鼠标设置,选择你的鼠标,PS2接口,串口,两键,三键,如果不确定就用默认的,直接选NEXT

然后我们看到一段欢迎的画面(Welcome to redhat linux),这里无关紧要,直接选NEXT

好,到了安装选择的一步,这里分为两大部分,一是安装,二是升级,安装部分又可选择工作站,服务器,笔记本电脑,和自定义安装,如果是之一次装,请先试试,工作站安装。

然后到了分区的选项,有两个选择,一是用Disk Druid手动分区,二是用fdisk手动分区。我们选上面的

到了这里,我们就可以看到你的硬盘所有的分区,这里我们要记得弯耐一点,就是用笔记本抄下每行的第二个数据,如:hda1,hda5,等等,这是你的硬盘上的分区在LINUX下名字,记下以后,通过修改/etc/fstab文件,可以实现在LINUX下面访问WINDWOS的分区。(此方法在后面详细再讲)

我们在LINUX的主分区上面双击鼠标左键,就弹出一个对话框,我们输入一个/以后回车就可以了

这一步我们直接选NEXT,等安装完以后就可以直接用LINUX启动计算机。

网络设置,如果你是拨号的话,就直接选NEXT,如果你是通过局域网或是宽带上网,就需要填写IP和网关。

网络服务选择,我们用暂时默认的

支持语言选择,如果你英语好,就直接选NEXT,如果你想尝试汉化REDHAT,那么更好选上中文,如果找不到,就全选。

时区选择,这里点一下中国地图上的城市就可以了

口令设置,输入你的口令,还可以添加用户,可以添加可以不添加,口令不输入的话为空。

自定义软件,这里把三个空格都打上钩,然后选NEXT,这样我们就安装了2种图形,GNOME,KDE,以薯闹扮及游戏,如果你想装别的软件,就选中最下面的select individual packages,那么就可以自定义安装,

里数灶面软件很多,我不知道怎么选,所以就全选中了,以后可以慢慢试,不过这里全装的话,一共有2G多哟

然后是显卡设置,在这里找到自己的显卡型号

显示器设置

这里是设置进入XWINDOWS以后的分辨率,以及文字方式登陆和图形方式登陆的选择

然后一直NEXT就可以了,REDHAT7。1的安装也就到此告一段落了,慢慢等进度条加满

创建启动盘,直接选NEXT(记得放软盘哟),不想创建就选中Skip boot disk creation,再选下一步。

然后连选NEXT就结束了

参考资料:

另外,团IDC网上有许多产品团购,便宜有口碑

我也在看core设置

学到的分享给你:

在用户的~/.bash_profile里加上ulimit -c unlimited来让特定的用户能产生core文件

而ulimit -c 1024 可以设置core文件大小。。。

此外对于产颤悉生的core文件的命名规则,以下的两个proc文件系统下的文件会对他产历洞卖生影响:

1、/proc/sys/kernel/core_uses_pid能控制产生的core文件的文件名中是否添加pid作为扩展

2、/proc/sys/kernel/core_pattern能设置格式化的core文件保存位置或文件名,

例如:/corefile/core-%e-%p-%t将会控制所产生的core文件会存放到/corefile目录下,产生的文件名为core-命令名-pid-时肢逗间戳

如何查看core文件

在Unix系统下,应用程序崩溃竖迟搜,一般会产生core文件,如何根据core文件查找问题的所在,并做相应的分析和调试,是非常余历重要的,本文对此做简单介绍。

例如,一个程序cmm_test_tool在运行的时候发生了错误,并生成了一个core文件,如下:

-rw-r–r– 1 root cmm_test_tool.c

-rw-r–r– 1 root

cmm_test_tool.o

-rwxr-xr-x 1 root cmm_test_tool

-rw——- 1 root

core.19344

-rw——- 1 root core.19351

-rw-r–r– 1 root

cmm_test_tool.cfg

-rw-r–r– 1 root cmm_test_tool.res

-rw-r–r– 1 root

cmm_test_tool.log

#

就可以利用命令gdb进行查找,参数一是应用程序的名称,参数二是core文件,运行

gdb

cmm_test_tool core.19344结果如下:

# gdb cmm_test_tool core.19344

GNU gdb Red Hat

Linux (5.2.1-4)

Copyright 2023 Free Software Foundation, Inc.

GDB is free

software, covered by the GNU General Public License, and you are

welcome to

change it and/or distribute copies of it under certain conditions.

Type “show

copying” to see the conditions.

There is absolutely no warranty for GDB. Type

“show warranty” for details.

This GDB was configured as

“i386-redhat-linux”…

Core was generated by `./cmm_test_tool’.

Program

terminated with signal 11, Segmentation fault.

Reading symbols from

/lib/i686/libpthread.so.0…done.

Loaded symbols for

/lib/i686/libpthread.so.0

Reading symbols from

/lib/i686/libm.so.6…done.

Loaded symbols for /lib/i686/libm.so.6

Reading

symbols from /usr/lib/libz.so.1…done.

Loaded symbols for

/usr/lib/libz.so.1

Reading symbols from

/usr/旦毁lib/libstdc++.so.5…done.

Loaded symbols for

/usr/lib/libstdc++.so.5

Reading symbols from

/lib/i686/libc.so.6…done.

Loaded symbols for /lib/i686/libc.so.6

Reading

symbols from /lib/libgcc_s.so.1…done.

Loaded symbols for

/lib/libgcc_s.so.1

Reading symbols from /lib/ld-linux.so.2…done.

Loaded

symbols for /lib/ld-linux.so.2

Reading symbols from

/lib/libnss_files.so.2…done.

Loaded symbols for /lib/libnss_files.so.2

#0

0×4202cec1 in __strtoul_internal () from

/lib/i686/libc.so.6

(gdb)

进入gdb提示符,输入where,找到错误发生的位置和堆栈,如下:

(gdb) where

#0 0×4202cec1 in __strtoul_internal () from

/lib/i686/libc.so.6

#1 0×4202d4e7 in strtoul () from

/lib/i686/libc.so.6

#2 0×0804b4da in GetMaxIDFromDB (get_type=2,

max_id=0×806fd20) at cmm_test_tool.c:788

#3 0×0804b9d7 in ConstrctVODProgram

(vod_program=0×40345bdc) at cmm_test_tool.c:946

#4 0×0804a2f4 in

TVRequestThread (arg=0×0) at cmm_test_tool.c:372

#5 0×in

pthread_start_thread () from /lib/i686/libpthread.so.0

(gdb)

至此,可以看出文件出错的位置是函数 GetMaxIDFromDB

,两个参数分别是2和0×806fd20,这个函数位于源代码的788行,基于此,我们就可以有针对性的找到问题的根源,并加以解决。

从接触unix开始就一直听到和遇到core dump,特别是刚学着使用C语言在AIX下编写程序的时候,core dump更是时不时就会不请自来。记得当时刚写应用的时候,提交程序时最怕的就是在运行过程时遇到core dump,对于银行核心系统,特别是使用静态应用进程,如果一个相对频繁一点的交易导致core dump,那么毫无疑问,除了赶紧定位错误改程序外,重启进程甚至无法争取到多少缓冲的时间来进行代码的更正和测试。而且往往导致core dump的,就是程序中一个小小的未注意到或者未测试到的一个疏忽。

虽然常常遇到core dump,不过很长时间内,都是出于知道这个名字,知道它导致的后果,知道一部分导致它出现的原因,其他羡纤的就都不甚了了了。说起来,就是自己太懒了,懒得看书……少壮不努力啊。看过一则统计,说60岁以上的老人,超过70%都后悔少壮不努力,不知统计的数据能否反映整个社会的情况。不过总的来说,这句古话还是有些道理的。大家不要学我。哈哈

core dump,翻译过来讲,就是核心转储。大致上就是指,如果由于应用错误,如浮点异常、指令异常等,操作系统将会转入内核的异常处理,向对应的进程发送特定的信号(SIGNAL),如果进程中没有对这些信号进行处理,就会转入默认的处理,core dump就是其中的一种。如果进程core dump,系统将会终止该进程,同时系统会产生core文件,以供调试使用。这个core文件其实就是内存的映像,即进程执行的时候内存的内容,也就是所谓的core dump。平常大家说某某进程core dump了,其实主要的意思就是说:某某进程因为错误而被系统自动终止了。

AIX上提供了dbx工具可以对core dump进行调试,协助定位引起core dump的代码。最普通的语法是:

dbx 应用名 core文件, 然后使用where命令来显示调试信息

关于linux 进程 core的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » Linux进程核心dump技术简介 (linux 进程 core)