如何在linux中使用c ++代码设置核心文件名?
Linux转储核心文件二进制崩溃,是否可以设置核心转储文件名?
答案 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'。