您的足迹:首页 > 语言程序 >Linux 的 core 文件

Linux 的 core 文件

1. 什么是core文件

core 文件是大多数 UNIX 系统实现的一种特性,当进程崩溃时,操作系统会将进程当前的内存映像和一部分相关的调试信息写入 core 文件,方便人们后面对问题进行定位。

2. 哪些信号可能会产生core文件

操作系统里面有很多信号(每个信号都有一个名字,且已SIG开头,用正整数表示,Linux系统一般在<bits/signum.h>头文件中定义),分别代表了不同的含义,在Linux系统中,我们可以通过shell命令 kill -l 来查看系统有哪些信号。操作系统收到信号时,内核会按照以下三种方式之一去对信号进行处理:

  • 忽略此信号。大多数的信号都可以用这种方式去处理,即内核收到此信号时,对进程不做任何处理,直接忽略。但是SIGKILL和SIGSTOP这两个信号不能被忽略,因为它们向超级用户提供了使进程终止或停止的可靠方法。
  • 捕捉信号。即我们向内核注册一个信号处理函数,当内核收到某个信号时,就去调用注册的信号处理函数对信号进行处理。比如我们经常使用的命令kill默认发的是SIGTERM终止信号。注意,不能捕捉SIGKILL和SIGSTOP信号。
  • 执行默认动作。每个系统都有一套自己默认的信号处理函数,即如果我们不显式的去捕捉信号,那内核收到信号时,要么忽略此信号,要么执行默认的操作。可以理解为操作系统有自己默认的信号处理函数。

Linux信号有很多,这里我们列举出默认动作中可能产生core文件的信号(摘自《UNIX环境高级编程》第二版)

信号名字 说明 默认动作
SIGABRT 异常终止(调用abort函数产生此信号) 终止+core
SIGBUS 硬件故障,比如出现某些内存故障 终止+core
SIGEMT 硬件故障 终止+core
SIGFPE 算术异常,比如除以0,浮点溢出等 终止+core
SIGILL 非法硬件指令 终止+core
SIGIOT 硬件故障 终止+core
SIGQUIT 终端退出符,比如Ctrl+C 终止+core
SIGSEGV 无效内存引用 终止+core
SIGSYS 无效系统调用 终止+core
SIGXCPU 超过CPU限制(setrlimit) 终止+core/忽略
SIGXFSZ 超过文件长度限制(setrlimit) 终止+core/忽略

如果我们没有定义上述信号的信号处理函数,那默认情况下,内核收到这些信号,将终止进程,并产生该进程的core文件(该进程的内存映像以及一些调试信息便保存在该core文件中)。

3. 如何开启与关闭core文件

类UNIX操作系统为我们提供了一个可以打开与关闭core文件的开关,因为并非所有场景我们都希望可以生成core文件。类UNIX操作系统为我们提供了一个工具ulimit可以用来设置和查看文件大小的限制,所以我们也可以用这个工具来查看和设置core大小与限制。使用 ulimit -a 可以查看系统上面所有的文件大小的限制,比如下面是我的系统的输出结果:

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)

关于我们 - 联系我们 - 留言反馈

站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

免责声明:本站所有内容来源于互联网。如果本站部分内容侵犯您的权益,请您告知,站长会立即处理。

Powered by emlog

京ICP备15021761号-1

sitemap