以 PDF 格式下載這本書 (2433 KB)
第 16 章 コアファイルの管理 (手順)この章では、coreadm コマンドを使って、コアファイルを管理する方法について説明します。 コアファイルの管理手順については、「コアファイルの管理 (作業マップ)」を参照してください。 コアファイルの管理 (作業マップ)
コアファイルの管理の概要コアファイルは、プロセスまたはアプリケーションが異常終了した場合に生成されます。コアファイルは coreadm コマンドで管理します。 たとえば、coreadm コマンドを使用して、プロセスコアファイルをすべて同じシステムディレクトリに置くようにシステムを構成できます。Solaris のプロセスやデーモンが異常終了した場合に、特定のディレクトリにあるコアファイルを調べればよいため、問題の追跡が容易になります。 構成可能なコアファイルのパス次の 2 つの構成可能な新しいコアファイルのパスは、個別に有効または無効にすることができます。
プロセスが異常終了すると、コアファイルがデフォルトで現在のディレクトリに作成されます。グローバルコアファイルのパスが有効になっていると、プロセスが終了するたびにコアファイルが 2 つ、1 つは現在の作業ディレクトリに、1 つはグローバルコアファイルのディレクトリにそれぞれ作成されます。 デフォルトでは、setuid プロセスは、グローバルの設定やプロセス別のパスを使ってコアファイルを生成することはありません。 拡張されたコアファイル名グローバルコアファイルディレクトリが有効な場合、次の表に示す変数を使って コアファイルを相互に区別できます。
たとえば、グローバルコアファイルパスが次のように設定されている場合、 /var/core/core.%f.%p PID 12345 の sendmail プロセスが異常終了すると、次の コアファイルが作成されます。 /var/core/core.sendmail.12345 コアファイル名パターンの設定コアファイル名パターンは、グローバル、ゾーン別、またはプロセス別に設定できます。さらに、システムリブート後も有効なプロセス別デフォルトを設定できます。 たとえば、次の coreadm コマンドでは、デフォルトのプロセス別コアファイルパターンを設定します。この設定は、デフォルトのコアファイルパターンを明示的に上書きしていないプロセスに対して適用されます。この設定はシステムリブート後も有効です。
次の coreadm コマンドでは、任意のプロセスに対しプロセス別コアファイル名パターンを設定します。
$$ 記号には、現在実行中のシェルのプロセス ID を指定します。プロセス別コアファイル名パターンは、すべての子プロセスに継承されます。 グローバルまたはプロセス別のコアファイル名パターンを設定したら、これを coreadm -e コマンドで有効にする必要があります。詳細については次の手順を参照してください。 このコマンドをユーザーの $HOME/.profile または $HOME/.login ファイルに入れておけば、ユーザーのログインセッションで実行するすべてのプロセスに対しコアファイル名パターンを設定できます。 setuid プログラムがコアファイルを作成できるようにするcoreadm コマンドを使って setuid プログラムを有効または無効にすれば、次のパス設定を行うことによって、すべてのシステムプロセスに対して、または各プロセスに対してコアファイルを作成できます。
デフォルトでは、両方のフラグが無効になっています。セキュリティー上の理由により、グローバルコアファイルパスは、/ で始まるフルパス名であることが必要です。スーパーユーザーがプロセス別コアファイルを無効にすると、個別のユーザーがコアファイルを得ることはできなくなります。 setuid コアファイルはスーパーユーザーによって所有され、スーパーユーザーだけに読み取り/書き込み権が与えられます。通常ユーザーは、たとえ setuid コアファイルを生成したプロセスを所有していても、それらのファイルにアクセスできません。 詳細は、coreadm(1M) のマニュアルページを参照してください。 現在のコアダンプ構成を表示する方法現在のコアダンプ構成を表示するには、オプションを指定しないで coreadm コマンドを実行します。
|
$ coreadm -p $HOME/corefiles/%f.%p $$ |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
グローバルコアファイル名パターンを設定します。
# coreadm -g /var/corefiles/%f.%p |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
プロセス別コアファイルのパスを有効にする
# coreadm -e process |
現在のプロセスのコアファイルパスを表示して構成を確認します。
$ coreadm $$ 1180: /home/kryten/corefiles/%f.%p |
スーパーユーザーになるか、同等の役割を引き受けます。
役割には、認証と特権コマンドが含まれます。役割の詳細については、『Solaris のシステム管理 (セキュリティサービス)』の「RBAC の構成 (作業マップ)」を参照してください。
グローバルのコアファイルのパスを有効にする
# coreadm -e global -g /var/core/core.%f.%p |
現在のプロセスのコアファイルパスを表示して構成を確認します。
# coreadm
global core file pattern: /var/core/core.%f.%p
global core file content: default
init core file pattern: core
init core file content: default
global core dumps: enabled
per-process core dumps: enabled
global setid core dumps: disabled
per-process setid core dumps: disabled
global core dump logging: disabled
|
NOTICE: 'set allow_setid_core = 1' in /etc/system is obsolete NOTICE: Use the coreadm command instead of 'allow_setid_core' |
setuid コアファイルを許容する古いパラメータが /etc/system ファイルにあります。
/etc/system ファイルから allow_setid_core=1 を削除します。次に coreadm コマンドを使って、 グローバル setuid コアファイルパスを有効にします。
一部の proc ツールが拡張されて、プロセスのコアファイルやライブプロセスが調べられるようになりました。proc ツールは、/proc ファイルシステムの機能を操作するユーティリティーです。
現在、コアファイルを処理できるツールは /usr/proc/bin ディレクトリにある pstack、pmap、pldd、pflags、pcred です。これらのツールを使用するには、プロセス ID を指定するように、コアファイルの名前をコマンド行に指定します。
proc ツールを使用してコアファイルを調べる方法については、proc(1) のマニュアルページを参照してください。
$ ./a.out Segmentation Fault(coredump) $ /usr/proc/bin/pstack ./core core './core' of 19305: ./a.out 000108c4 main (1, ffbef5cc, ffbef5d4, 20800, 0, 0) + 1c 00010880 _start (0, 0, 0, 0, 0, 0) + b8 |