0

我正在尝试在运行 CentOS 的机器上启用核心文件;但是,我尝试过的任何东西都没有产生核心文件……这是我所做的:

将以下两行添加到/etc/security/limits.conf

*     hard    core    unlimited
*     soft    core    unlimited

将以下行添加到/etc/sysconfig/init

DAEMON_COREFILE_LIMIT='unlimited

将以下行添加到/etc/profile

ulimit -c unlimited > /dev/null 2>&1

将以下行添加到/etc/sysctl.conf

kernel.core_pattern = '/srv/core/%p_%t.core'
fs.suid_dumpable = 1

我确保它/srv/core存在并具有777权限。我执行init 6以重新启动操作系统。系统恢复后,我执行了以下 C 脚本以尝试生成核心文件:

#include <sys/types.h>
#include <unistd.h>
#include <signal.h>

int main(int argc, char **argv) {
  kill(getpid(), SIGQUIT);
}

输出很简单Quit,而我希望看到Quit (core dumped);它显然不会产生核心文件:(

我错过了什么或做错了什么?在此先感谢您的帮助!

4

2 回答 2

2

看起来核心文件是在 CentOS 6 上默认生成的,但由“ABRT”服务处理,默认情况下可能会将它们写入/var/spool/abrt目录。无论如何,这就是我安装 VM 的方式。为了说明这一点,我做了以下事情:

  1. 《睡50&》
  2. “杀死-SIGSEGV”
  3. “abrt-cli 列表”
  4. 识别与我的段错误睡眠进程匹配的“目录:”行并 cd 到它
  5. 找到存储在那里的 coredump 文件

SIGQUIT 似乎也产生了一个核心。

鉴于这些,我将验证 abrt 服务是否正在运行,我会查看我是否有以前的条目/var/spool/abrt正在屏蔽新的核心文件(我认为abrt试图避免重复的条目,这可能是你想要的)。不过,我不确定任何额外的配置是否会有所帮助或伤害。

于 2014-06-18T13:31:00.747 回答
1
只是改变:
kernel.core_pattern = '/srv/core/%p_%t.core' 至 kernel.core_pattern = /srv/core/%p_%t.core 没有“'”,它会工作......
于 2016-11-15T00:10:50.520 回答