プロセスが現在どのファイルに書き込んでいるかを確認する方法

プロセスが現在どのファイルに書き込んでいるかを確認する方法

私の状況は、特定のプロセス(この場合はThunderbird)がユーザー入力に約1分間反応しないことがあります。私はiotopそれを使用しながらディスクに多くを記録することがわかりました。これで、どのファイルに書き込むかを知りたいのですが、残念ながら、iotop開かれたファイル(説明者)固有の統計ではなく、プロセス固有の統計のみを提供します。

私はこれを使用して、lsofプロセスによって現在開いているファイルが何であるかを知ることができることを知っていますが、もちろんThunderbirdは多くのファイルを開くので、あまり役に立ちません。iostatデバイス固有の統計のみを表示します。

この問題はランダムに発生し、表示されるのにかなり長い時間がかかる可能性があるため、どのファイルに最も多くの書き込みがあるかを調べるためにThunderbirdを追跡し、長いログを記録する必要がないことを願っています。

ベストアンサー1

プロセスが中断されている間にプロセスにstraceを接続すると(代替端末から事前にpidを取得してコマンドをキューに入れることができます)、書き込みをブロックするファイル記述子が表示されます。

簡単な例:

$ mkfifo tmp
$ cat /dev/urandom > tmp &
[1] 636226
  # this will block on open until someone opens for reading

$ exec 4<tmp
  # now it should be blocked trying to write

$ strace -p 636226
Process 636226 attached - interrupt to quit
write(1, "L!\f\335\330\27\374\360\212\244c\326\0\356j\374`\310C\30Z\362W\307\365Rv\244?o\225N"..., 4096 <unfinished ...>
^C
Process 636226 detached

おすすめ記事