2014-01-07 16 views
5

(ここで私はLinuxのみをターゲットにしています)コアダンプファイルは誰が生成しますか?カーネルかglibc?

私はコアがglibcのデフォルトシグナルハンドラによって生成されていると仮定しています。

私はgoogleの結果のほとんどは、OSがコアダンプを生成すると言います。 OSがコアを生成した場合、シグナルハンドラは最初にコアダンプされますか?

答えて

5

カーネル自体がコアダンプを生成します。ここでは、Linuxカーネルソースにコア処理ルーチンを参照してください。

http://lxr.linux.no/linux+v3.12.6/fs/coredump.c

プロセスは、以下の信号1のいずれかを受信した場合、カーネルはコアダンプを試みることによって応答します。

#define SIG_KERNEL_COREDUMP_MASK (\ 
rt_sigmask(SIGQUIT) | rt_sigmask(SIGILL) | \ 
rt_sigmask(SIGTRAP) | rt_sigmask(SIGABRT) | \ 
rt_sigmask(SIGFPE) | rt_sigmask(SIGSEGV) | \ 
rt_sigmask(SIGBUS) | rt_sigmask(SIGSYS) | \ 
rt_sigmask(SIGXCPU) | rt_sigmask(SIGXFSZ) | \ 
SIGEMT_MASK 

このコアダンプは設定可能であり、かつファイル/proc/sys/kernel/core_pattern、およびulimitを含むいくつかの方法で無効にしたり、制御することができます。信号処理機構を介してこれらの信号の供給を制御することもできる。

+0

最初にコアがダンプされるか、最初にシグナルハンドラが呼び出されますか? –

+0

シーケンス:1-イベントが発生する(セグメンテーション・フォルトのように)2カーネルがこのイベントのプロセスに信号で通知する3プロセス・ハンドルシグナル(ユーザがインストールしたハンドラまたはデフォルト・ハンドラのいずれか)4上記のシグナルは、デフォルトのシグナルハンドラを使用します。 – Peter

関連する問題