Linuxで実行中のプロセスの非侵入型コアダンプを取得する方法を探しています。
私はgdbに精通していますが、それはプロセスに接続されており、デバッグのために停止しているgcore
場合にのみ実行できgdb
ます。大きなコアダンプの場合、実行が中断されるまでに数秒、または数分かかる場合があります。
ノンブロッキングの代替手段はありますか?
Linuxはcopy-on-writeメモリをサポートしますが、これはfork()
なしでのサポートに依存していexec()
ます。だから私は、カーネルがダンプされるプロセスのプロセスページテーブルのコピーオンライトスナップショットを取得し、元のプロセスが実行を続けている間にコアを書き出すカーネルレベルの何かを考えています。
親が幸運に進んでいる間に子gdb
を強制的fork()
にダンプし、wait()
終了後に子を刈り取るために親に使用できると確信しています。しかし、それは面倒であり、短いものではありますが、依然として親プロセスの2つの中断が必要です。
確かに誰かがこれを必要としているのですか?
この素晴らしい質問に賛成票を1つしか与えられないのは残念です。
—
ペテルはモニカを復活させると14
素晴らしい質問です。私はその答えを楽しみにしています。私からの+1
—
thanasisk 14
1)gdbを使用してプロセスをアタッチする2)「call fork」コマンドでフォークする3)子プロセスのコアをダンプする4)死んだ子を親に待機させる(別の「call wait4」)5 )プロセスから切り離します6)1-5を自動化しますか?Gdbは単純なsys_ptrace()システムコールを使用します。gdbから完全に独立した、実際には複雑ではないCツールである可能性があります。
—
ペテルはモニカを復活させると14
仮想マシンでは、スナップショットを作成し、分析するクローンとしてそれを表示できます。おそらくここに記載されているツールの一つは、あなたを助ける:cyberciti.biz/programming/linux-memory-forensics-analysis-tools
—
ジョヴァンニTirloni
子プロセスもforkしてから終了することにより、2番目の中断を回避できます。その後、親プロセスは子をすぐに待機してから続行でき、祖父母はコアをダンプします。
—
カスペルド14