CentOS6を実行しているマシンでコアファイルを有効にしようとしています。しかし、私が試したことは何もコアファイルを生成していません…これが私がしたことです:
/etc/security/limits.conf
に次の2行を追加しました。
* 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
を実行してOSを再起動しました。システムが復旧したら、コアファイルを作成するために次の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