プロセスを終了せずにプロセスコアダンプ

プロセスを終了せずにプロセスコアダンプ

実際にプロセスを終了せずにプロセス(または同様のもの)のコアダンプを取得する方法はありますか?組み込みシステムで実行されるマルチスレッドPythonプロセスがあります。一般的な状況(たとえば、実行する必要がある他のプロセス)でプロセスのスナップショットを取得できるようにしたいが、Pythonなしでgdbに接続(またはgdbで実行)するのに十分なメモリがありません。プロセスは唯一実行中です。

この質問に意味があることを願っています。

ベストアンサー1

SIGUSR1一般的なトリックは、プログラムをトリガーするもの(おそらく何かなどのシグナル)を持ち、子fork()プロセスがabort()コア自体をダンプするように呼び出すことです。

from os import fork, abort
(...)
def onUSR1(sig, frame):
    if os.fork == 0:
        os.abort

そして初期化中

from signal import signal, SIGUSR1
from wherever import onUSR1
(...)
signal.signal(signal.SIGUSR1, wherever.onUSR1)

このように使用すると、ほとんどforkすべてのアドレス空間が共有されるため、余分なメモリを消費しません(これがコアダンプを生成できる理由です)。

昔々、このトリックは、複雑な初期化後にイメージを保存するためにコアダンプから実行可能ファイルを生成するために呼び出されたプログラムで使用されundumpました。emacstemacs

おすすめ記事