core

Autres langues

Langue: ja

Version: 2006-04-03 (fedora - 25/11/07)

Section: 5 (Format de fichier)

名前

core - コアダンプファイル

説明

ある種のシグナルを受けた場合のデフォルトのアクションは、 プロセスを終了し (terminate)、 コアダンプファイル (core dump file) を生成することである。コアダンプファイルは、ディスク上に生成される 終了時のプロセスのメモリイメージを内容とするファイルである。 どのシグナルを受けたときにプロセスがコアダンプを生成するかのリストは signal(7) に書かれている。

プロセスはソフト・リソース制限 RLIMIT_CORE を設定することで、「コアダンプ」シグナルを受信した際に生成される コアダンプファイルのサイズに上限を課すことができる。詳細は getrlimit(2) を参照。

コアダンプファイルが生成されない状況がいくつかある:

*
プロセスがコアファイルを書き込む許可を持たない場合 (デフォルトでは、コアファイルは core という名前で、カレント・ワーキング・ディレクトリに生成される。 命名規則の詳細は下記を参照)。 コアファイルを生成しようとしたディレクトリが書き込み可能でない場合、 もしくは同じ名前のファイルが存在し、そのファイルが書き込み可能でも 通常のファイルでもない場合 (例えば、ディレクトリやシンボリックリンク)、 コアファイルの生成は失敗する。
*
コアダンプに使おうとしたのと同じ名前の (書き込み可能な、通常の) ファイルが すでに存在し、そのファイルに対するハードリンクが 2個以上ある場合。
*
コアダンプファイルを生成しようとしたファイルシステムがフルであるか、 inode が全て使用されているか、読み込み専用でマウントされている場合。 または、そのユーザのディスク使用量がそのファイルシステムの クオータ (quota) に達している。
*
コアダンプファイルを生成しようとしたディレクトリが存在しない場合。
*
プロセス毎のリソース制限 RLIMIT_CORERLIMIT_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.6 および 2.4.21 以降で利用できる)。 テンプレートには % 指示子 (specifier) を入れることができる。 これはコアファイルが生成される際に、以下の値に置き換えられる。
     
   %%  1 つの % 文字
   %p  ダンプされたプロセスのプロセス ID (PID)
   %u  ダンプされたプロセスの実ユーザ ID (real UID)
   %g  ダンプされたプロセスの実グループ ID (real GID)
   %s  ダンプを引き起こしたシグナルの番号
   %t  ダンプ時刻 (1970 年 1 月 1 日 0:00 からの秒数)
   %h  ホスト名 (uname(2) で返される 'nodename' と同じ)
   %e  実行ファイル名
     
 
テンプレートの末尾に 1 個だけ % がある場合、 その % はコアファイル名には含められない。また、上で列挙されて いない % と文字の組み合わせがあった場合も同様である。 テンプレートにおける他の文字は、 コアファイル名としてそのまま使われる。 テンプレートには '/' 文字を入れることができ、 ディレクトリ名の区切り文字と解釈される。 結果として生成されるコアファイル名の最大サイズは 64 バイトである。 このファイルのデフォルト値は "core" である。 以前のものとの互換性のため、 /proc/sys/kernel/core_pattern に "%p" が含まれず、 かつ /proc/sys/kernel/core_uses_pid (下記参照) が 0 でない場合は、.PID がコアファイル名に追加される。

バージョン 2.4 以降の Linux では コアダンプファイルの名前を制御する原始的な方法も提供されている。 /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 が末尾に付加されない。 (この機能がまず役に立つのは LinuxThreads 実装を利用している場合である。 LinuxThreads 実装では、プロセス内の個々のスレッドは異なるプロセス ID を持つ。)

関連項目

gdb(1), getrlimit(2), prctl(2), sigaction(2), elf(5), proc(5), pthreads(7), signal(7)