我正在尝试在运行 CentOS 6 的计算机上启用核心文件;但是,我尝试过的任何方法都没有生成核心文件……以下是我所做的:
添加了以下两行/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);
}
它不会生成核心文件:(
我遗漏了什么或做错了什么?提前感谢您的帮助!
答案1
如果您的程序以 root 身份运行,那么您添加的 limits.conf 条目将不适用。“*”适用于除 root 之外的所有用户。
如果你的程序以 root 身份运行,请添加以下内容:
root hard core unlimited
root soft core unlimited
另外,确保 SELinux 没有阻止写入核心转储。
getenforce
如果 SELinux 正在运行,请验证审计是否正在运行,尝试获取核心转储,然后执行以下操作:
grep -i denied /var/log/audit/auditd
答案2
问题可能是因为 core_pattern 的路径被引用了。请尝试以下方法:
kernel.core_pattern = /srv/core/%p_%t.core