CORE(5)

名称
core - メモリイメージのファイルフォーマット

書式
<sys/param.h>

解説
プロセスを異常終了させる少数のシグナルは、 プロセスのメモリ内状態の記録をディスクに書き出させる効果もあります。 これにより、デバッガを使用して後で検査を行うことが可能です。( sigaction(2) を参照してください。) このメモリイメージは、デフォルトでは作業ディレクトリの プログラム名.core という名前のファイルに書かれます。 ただし、終了したプロセスがそのディレクトリに書きこみ権限を持ち、 発生した異常がシステムを破壊しないことが前提です。 (システムが破壊された場合には、 コアファイルを保存するかどうかの決定は不定です。 savecore(8) を参照してください。)

コアファイルの最大サイズは setrlimit(2) により制限されます。 制限よりも大きくなるファイルは生成されません。 ファイル名は sysctl(8) 変数 kern.corefile にて制御されます。 この変数の内容がコアイメージを格納するファイルの名前を示します。 このファイル名は絶対でも相対でもかまいません (後者の場合、コアを生成するプログラムの現在のディレクトリから解決されます)。 このファイル名テンプレート中のシーケンス %N はプロセス名で置き換えられ、 %P はプロセスの PID で置き換えられ、 %U は UID で置き換えられます。 デフォルトの名前は %N.core であり、伝統的な FreeBSD の振舞いとなります。

デフォルトでは、実または実効のユーザ、グループが変更されている プロセスがコアファイルを生成しません。 この動作は sysctl(8) で kern.sugid_coredump を 1 にすることによりコアを生成する用に変更することができます。 コアファイルは、(ページ数での) 大きさが <sys/param.h> ファイルで UPAGES と定義されている u. 領域からなります。 u. 領域は <sys/user.h> に記述されている user 構造体から始まります。 コアの残りの部分には、 データページに続いてプロセスイメージのスタックページが格納されます。 コアファイル中のデータ空間イメージの (ページ数での) 大きさは、 u. 領域の変数 u_dsize で与えられます。 コアファイル中のスタックイメージの (ページ数での) 大きさは、 u. 領域の変数 u_ssize で与えられます。 ``ページ'' サイズは定数 PAGE_SIZE で与えられます (これも <sys/param.h> から与えられます)。

使用例
全コアイメージを、 /var/coredumps 以下のユーザごとのプライベート領域に格納するためには、 次のように sysctl(8) コマンドを使用します:

    sysctl kern.corefile="/var/coredumps/%U/%N.core"

関連項目
gdb(1), kgdb(1), setrlimit(2), sigaction(2), sysctl(8)

歴史
core ファイルのフォーマットは AT&T UNIX に登場しました。