core - ファイルのフォーマットと規約の説明 - Linux コマンド集 一覧表
名前
core - コアダンプファイル
説明
ある種のシグナルを受けた場合のデフォルトのアクションは、
プロセスを終了し (terminate)、
"コアダンプファイル (core dump file)"
を生成することである。コアダンプファイルは、ディスク上に生成される
終了時のプロセスのメモリイメージを内容とするファイルである。
どのシグナルを受けたときにプロセスがコアダンプを生成するかのリストは
signal
(7) に書かれている。
プロセスはソフト・リソース制限
RLIMIT_CORE
を設定することで、「コアダンプ」シグナルを受信した際に生成される
コアダンプファイルのサイズに上限を課すことができる。詳細は
getrlimit
(2) を参照。
コアダンプファイルが生成されない状況がいくつかある:
プロセスがコアファイルを書き込む許可を持たない場合
(デフォルトでは、コアファイルは
core
という名前で、カレント・ワーキング・ディレクトリに生成される。
命名規則の詳細は下記を参照)。
コアファイルを生成しようとしたディレクトリが書き込み可能でない場合、
もしくは同じ名前のファイルが存在し、そのファイルが書き込み可能でも
通常のファイルでもない場合 (例えば、ディレクトリやシンボリックリンク)、
コアファイルの生成は失敗する。
コアファイルを生成しようとしたディレクトリが存在しない場合。
プロセス毎のリソース制限
RLIMIT_CORE
か
RLIMIT_FSIZE
が 0 に設定されている場合
(
getrlimit
(2)参照)。
プロセスが実行したバイナリファイルの読み出し許可が有効になっていない場合。
プロセスが実行している set-user-ID (set-group-ID) プログラムの所有者の
ユーザ (グループ) が、プロセスの実 UID (実 GID) と異なる場合
(但し、
prctl
(2)
PR_SET_DUMPABLE
操作の説明と、
proc
(5) の
/proc/sys/fs/suid_dumpable
ファイルの説明も参照のこと)。
コアダンプファイルの名前
デフォルトでは、コアダンプファイルの名前は core となるが、コアダンプファイルの名前を決めるのに使われるテンプレートを /proc/sys/kernel/core_pattern ファイルに定義することで、ファイル名を変更することができる ( /proc/sys/kernel/core_pattern は Linux 2.5 で導入された)。 テンプレートには % 指示子 (specifier) を入れることができる。 これはコアファイルが生成される際に、以下の値に置き換えられる。
テンプレートの末尾に 1 個だけ % がある場合、 その % はコアファイル名には含められない。また、上で列挙されて いない % と文字の組み合わせがあった場合も同様である。 テンプレートにおける他の文字は、 コアファイル名としてそのまま使われる。 テンプレートには '/' 文字を入れることができ、 ディレクトリ名の区切り文字と解釈される。 結果として生成されるコアファイル名の最大サイズは 64 バイトである。 このファイルのデフォルト値は "core" である。 以前のものとの互換性のため、 /proc/sys/kernel/core_pattern に "%p" が含まれず、 かつ /proc/sys/kernel/core_uses_pid (下記参照) が 0 でない場合は、.PID がコアファイル名に追加される。
%% 1 つの % 文字 %p ダンプされたプロセスのプロセス ID (PID) %u ダンプされたプロセスの実ユーザ ID (real UID) %g ダンプされたプロセスの実グループ ID (real GID) %s ダンプを引き起こしたシグナルの番号 %t ダンプ時刻 (1970 年 1 月 1 日 0:00 からの秒数) %h ホスト名 (uname(2) で返される 'nodename' と同じ) %e 実行ファイル名
Linux 2.4 では /proc/sys/kernel/core_pattern は存在しないが、コアダンプファイルの名前を制御する原始的な 方法が提供されている。 /proc/sys/kernel/core_uses_pid ファイルに値 0 が書かれている場合、コアダンプファイルは単純に core という名前になる。このファイルに 0 以外の値が書かれている場合、 コアダンプファイルは core.PID という形式の名前になり、ファイル名にプロセス ID が含まれる。
備考
gdb
(1) の
gcore
コマンドを使用すると、実行中のプロセスのコアダンプを取得できる。
マルチスレッドプロセス
(より正確には、
clone
(2) の
CLONE_VM
で生成された別プロセスとメモリを共有しているプロセス)
がコアダンプを生成する場合、
コアファイル名にプロセス ID が必ず付加される。
但し、
/proc/sys/kernel/core_pattern
の %p 指定によりコアファイル名のどこか他の場所にプロセス ID が
すでに含まれている場合は、プロセス ID が末尾に付加されない。