linux下默认是关闭core文件的生成,要想生成core文件:

一 core文件的生成

1、bsh

修改/etc/profile文件,该文件应该有类似配置:ulimit -c 20000,注释掉该配置,加以下配置:

ulimit

-c 1024 (控制core文件最大为1024K)

ulimit -Sc unlimited (不限制core文件的大小)

2、csh

修改/etc/csh.cshrc,加入以下配置:

limit coredumpsize 104857600

(控制core文件最大为100M)

csh下只能控制core文件的大小,如果不加控制:

limit coredumpsize

则为默认大小,在我所用的suse linux下,默认为1024K

以上修改均为root用户修改,修改后对所有用户生效,如果只想对某个用户生效,则只需修改该用户相应的配置(profile、cshrc)文件。

二、设置Core Dump文件目录和命名规则

/proc/sys/kernel/core_uses_pid可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0

/proc/sys/kernel/core_pattern可以设置格式化的core文件保存位置或文件名,比如原来文件内容是core-%e

可以这样修改:

echo

"/corefile/core-%e-%p-%t" >

core_pattern

将会控制所产生的core文件会存放到/corefile目录下,产生的文件名为core-命令名-pid-时间戳

以下是参数列表:

%p

- insert pid into filename 添加pid

%u - insert current uid into filename

添加当前uid

%g - insert current gid into filename 添加当前gid

%s - insert signal

that caused the coredump into the filename 添加导致产生core的信号

%t - insert UNIX

time that the coredump occurred into filename 添加core文件生成时的unix时间

%h - insert

hostname where the coredump happened into filename 添加主机名

%e - insert

coredumping executable name into filename 添加命令名

三、当程序接收到以下UNIX信号会产生core文件:

名字 说明

ANSI C POSIX.1 SVR4 4.3+BSD 缺省动作

SIGABRT

异常终止(abort)

SIGBUS 硬件故障

SIGEMT 硬件故障

SIGFPE 算术异常

SIGILL

非法硬件指令

SIGIOT 硬件故障

SIGQUIT

终端退出符

SIGSEGV 无效存储访问

SIGSYS

无效系统调用SIGABRT 异常终止(abo

SIGTRAP 硬件故障

SIGXCPU

超过CPU限制(setrlimit)

SIGXFSZ 超过文件长度限制(setrlimit)

如果想对某个信号捕获后自己处理,参考例子:

#include

#include

#include

void handler(int iSig)

{

printf( "Received signal %d \n",iSig);

...//自己的处理

exit(0);

}

int main()

{

signal( SIGSEGV, handler );

memset( 0x00,

0x00, 6 );

return 0;

}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐