如何使用c ++代码设置核心文件名?

时间:2011-09-19 11:25:22

标签: c++ linux

如何在linux中使用c ++代码设置核心文件名?

Linux转储核心文件二进制崩溃,是否可以设置核心转储文件名?

2 个答案:

答案 0 :(得分:6)

在我的系统(带内核2.6.32的Ubuntu 10.04)上,man core没有表明可以逐个进程地选择命名。但是,可以通过修改/proc/sys/kernel/core_pattern

在系统范围内进行更改
  

默认情况下,核心转储文件名为core,但是   /proc/sys/kernel/core_pattern文件(因为Linux 2.6和2.4.21)可以   设置为定义用于命名核心转储文件的模板。该   模板可以包含由...替换的%说明符   创建核心文件时的以下值:

   %%  a single % character
   %p  PID of dumped process
   %u  (numeric) real UID of dumped process
   %g  (numeric) real GID of dumped process
   %s  number of signal causing dump
   %t  time of dump, expressed as seconds since the Epoch (00:00h, 1 Jan 1970, UTC)
   %h  hostname (same as nodename returned by uname(2))
   %e  executable filename (without path prefix)
   %c  core file size soft resource limit of crashing process (since Linux 2.6.24)
     

模板末尾的单个%将从核心中删除   filename,与%后跟任何字符的组合   除了上面列出的那些。模板中的所有其他字符   成为核心文件名的文字部分。模板   可能包含'/'个字符,这些字符被解释为分隔符   目录名称。生成的核心文件名的最大大小   是128个字节(在2.6.19之前的内核中是64个字节)。默认值   在这个文件中是“核心”。为了向后兼容,如果   /proc/sys/kernel/core_pattern不包括"%p"和   /proc/sys/kernel/core_uses_pid(见下文)非零,然后是.PID   将附加到核心文件名。

答案 1 :(得分:4)

我相信this page通常会描述您正在寻找的内容。您可以做的是通过更改proc文件系统中的魔术条目来设置核心文件的命名方式:

echo "pattern" > /proc/sys/kernel/core_pattern

其中 pattern 是一个类似printf的模式字符串,记录在链接页面上。从C ++执行此操作只需要使用常规机制打开和写入该文件。但是,您必须是root才能写入'core_pattern'。