コアファイルを生成したホストを確認するには?

コアファイルを生成したホストを確認するには?

複数のシステムがNFSを介して同じファイルシステムを共有する設定があります。キューシステムを使用すると、処理ジョブをさまざまな属性を持つ複数のシステムに送信できます。

時にはジョブが中断され、コアファイル(名前など)が残りますcore.1234

そのコアファイルを生成したホストを見つける方法はありますか?ホスト名は何ですか?

(差がある場合は、Linux 64ビットに適用されます。)

ベストアンサー1

非常に低い周波数システムでは、コアファイルはほぼ確実に有効なELFファイルです。

 $ readelf -a core
 ELF Header:
 Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
 Class:                             ELF32
 Data:                              2's complement, little endian
 Version:                           1 (current)
 OS/ABI:                            UNIX - System V
 ABI Version:                       0
 Type:                              CORE (Core file)
 Machine:                           Intel 80386
 [...]

デバッガがそのメソッドを見つけることができるように、プラットフォーム固有の「説明」の数は説明セクションに追加されます。たとえば、Solarisの場合コア(4)NT_UTSNAME、システムコールのデータ構造を含む構造を表示できますuname(2)elfdump -n読み方ですが、私が知っている限り、Solarisはこれを行う唯一のオペレーティングシステムです(Solaris 11だけが期待どおりにelfdump機能すると思います)。

単純だが少し退屈で保証されない方法は、コアダンプ環境から変数(一部の起動スクリプトとシェルによって設定され、少なくとも設定されている)を取得しようとするHOSTことです。 :を使用してこれを実行できますが、元のバイナリが必要です。HOSTNAMEbashHOSTNAMEgdb

$ gdb /usr/bin/sleep core
[... snip ...]
(gdb) print (char ***) &environ
$1 = (char ***) 0x600bf8
(gdb) print $1[0][0]@10
$2 = {0x7fffffffd9c9 "HOST=myhostname", 0x7fffffffd9d9 "TERM=screen", 
0x7fffffffd9e5 "SHELL=/bin/csh", 
[...]

これenvironシンボルから文字列の塊を印刷します。。これはひどいハッキングですが、うまくいくかもしれませんstrings | grep HOSTNAME=

だから短い答えは」そのコアファイルを生成したホストを見つける方法はありますか?「Linuxでは簡単でも信頼もできません。

FWIW、Linuxの関連するコアダンプコードはにあり、fs/binfmt_elf.c以下を介して追加の「コメント」を可能にするフックがあります。ARCH_HAVE_EXTRA_ELF_NOTES、現在PowerPCでのみ利用可能です。 )

より良い計画はsysctlを使用したコアファイル名の設定@jlliagreが提案したように、各クライアントで次のことを行います。

sysctl kernel.core_pattern="%h-%t-%e.core"

(ここでsysctl言及されているものは同じで、変更が記録される可能性があり、* BSDシステムでも機能するため/proc好ましい。)sysctl/etc/sysctl.conf

おすすめ記事