当一个进程要异常终止时 可以选择把进程的用户空间内存数据全部保存到磁盘上 文件名通常是 core 这叫做 Core Dump。通常情况下,core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,程序出错的时候理论上都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。

进程异常终止通常是因为有Bug 比如,非法内存访问导致段错误 事后可以用调试器检查 core文件以查清错误原因 这叫做Post-mortem Debug 。一个进程允许产生多大的 core文件取决于进程的 Resource Limit( 这个信息保存 在 PCB中 )。

默认是不允许产生 core文件的 因为 core文件中可能包含用户密码等敏感信息 不安全;除此之外,每core dump一次就会产生一个core文件,次数多了占用内存空间,所以一般默认情况下是不允许生成core文件的,除非由于后台测试的需要,你自己对该项设置进行了更改。

利用上面的命令我们可以查看系统设定的core文件选项:

在开发调试阶段可以用 ulimit 命令改变这个限制 允许产生 core文件。

#include

这里的core.2678就是该进程被down掉所对应的core文件,其中的2678是该进程的pid。

ulimit 命令改变了Shell 进程的 Resource Limit,test进程的 PCB由 Shell进程复制而来 所以也具有和 Shell进程相同的 Resource Limit值 ,这样就可以产生 Core Dump了。

除此之外,core文件的内容是二进制的!