当程序core dump后发现确实在本地目录产生了core文件,但是如果程序多次core dump时,core文件会被覆盖,原因是每次core dump后生成的文件名默认都叫core,接下来就分享下如果想在每次core dum时产生的core文件都带上进程号怎么操作,或者你想把内核转储文件保存到其他目录怎么办?
解决方法:
可以通过修改kernel的参数,指定内核转储所生成的core文件的路径和文件名。
切换到root用户,修改/etc/sysctl.conf文件中sysctl变量kernel.core_pattern的设置。
root@linx:~# vim /etc/sysctl.conf
添加下面两行内容:
kernel.core_pattern = /var/core/core_%e_%p
kernel.core_uses_pid = 0
保存后退出。
注:如果/proc/sys/kernel/core_uses_pid 这个文件的内容被配置成1,即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。
这里/var/core表示所dump的文件存储的路径,如文件夹不存在需先手动创建,可以根据需要设置,其他参数分别表示:
%c :转储文件的大小上限
%e :所dump的文件名
%g :所dump的进程的实际组ID
%h: 主机名
%p :所dump的进程PID
%s :导致本次coredump的信号
%t :转储时刻(由1970年1月1日起计的秒数)
%u :所dump进程的实际用户ID
使用以下命令,使修改结果马上生效。
root@linx:~# sysctl –p /etc/sysctl.conf
请在/var目录下先建立core文件夹,然后执行a.out程序,就会在/var/core/下产生以指定格式命名的内核转储文件。
原文链接:https://blog.csdn.net/star_xiong/article/details/43529637