Я пытаюсь включить файлы ядра на машине с 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);
}
Не производит файл ядра :(
Что я упускаю или делаю не так? Заранее спасибо за вашу помощь!
Если ваша программа работает от имени root, то добавленные вами записи limits.conf не будут применяться. «*» относится ко всем пользователям, кроме root.
Если ваша программа работает от имени пользователя root, добавьте следующее:
root hard core unlimited
root soft core unlimited
Также убедитесь, что SELinux не препятствует записи дампа ядра.
getenforce
Если SELinux запущен, убедитесь, что аудит запущен, попробуйте получить дамп ядра, а затем выполните:
grep -i denied /var/log/audit/auditd
Проблема, вероятно, в том, что путь указан для core_pattern. Попробуйте вместо этого:
kernel.core_pattern = /srv/core/%p_%t.core