7

/proc/<pid>/statusによると、現在ディスク アクティビティをブロックしている実行中のプロセスのコアをダンプしたいと考えています。実際には、GPU で作業を行うのに忙しい (4 時間の作業のはずですが、現在はかなり長くかかっています)。プロセスの作業がどれだけ行われたかを知りたいので、プロセスのメモリをダンプできるとよいでしょう。ただし、私の知る限り、「ディスクアクティビティのブロック」とは、プロセスを中断することができないことを意味し、たとえば gdb を使用してプロセスをコアダンプするには、ptrace 経由でアタッチするためにプロセスを中断して一時的に停止する必要がありますよね?

(おそらく一貫性のない)メモリ状態を取得するためにルートとして読み取ることができることは知って/proc/<pid>/{maps,mem}いますが、プロセスのユーザー空間のCPUレジスタ値を取得する方法はわかりません...プロセスが内部にある間、それらは同じままですカーネルですよね?

4

1 に答える 1

3

おそらくgcore、プログラムで実行できます。これは基本的に、アタッチし、gcoreコマンドを使用し、再びデタッチする GDB のラッパーです。

これにより IO が中断される可能性があります (信号を受信したかのように) が、プログラムが正しく記述されていれば、おそらく再起動できます (デフォルトの処理により、いずれの場合にも発生する可能性があります)。

于 2013-03-24T12:39:57.683 に答える