web-dev-qa-db-ja.com

straceを使用して子プロセスを追跡する方法は?

straceを使用して、プロセスに簡単にアタッチしました。プロセスは90個のスレッドを作成しました。問題のあるスレッドを見つけたとき、親プロセス、次に祖父母スレッドなどをルートプロセスまでずっと退屈に検索する必要がありました。

どのスレッドが別のスレッドを作成したかをすばやく把握するためのトリックやツールはありますか?それとも、pstreeのようなスレッド作成のツリーを出力しますか?

92
projectshave

_strace -f_は、fork() edである子プロセスをトレースします。

98
Je Rog

strace-graphというPerlスクリプトがあります。 githubからのバージョン です。 crosstool-ngバージョンのコンパイラにパッケージされています。クロスプラットフォームでも使用できます。

ARM Linuxボックス。

$ ./strace -f -q -s 100 -o app.trc -p 449
$ tftp -pr app.trc 172.0.0.133

X86_64 Linuxボックス。

$ ./strace-graph /srv/tftp/app.trc 
 (anon)
  +-- touch /tmp/ppp.sleep
  +-- killall -HUP pppd
  +-- amixer set Speaker 70%
  +-- amixer set Speaker 70%
  +-- amixer set Speaker 70%
  +-- amixer set Speaker 70%
  +-- amixer set Speaker 50%
  +-- amixer set Speaker 70%
  `-- amixer set Speaker 50%

出力を使用して、メイントレースログをナビゲートすることができます。

18
artless noise

簡単な方法がわかりません。

-ffオプションと-o filenameを使用して、複数のファイル(pidごとに1つ)を作成できます。

例えば:

strace -o process_dump -ff ./executable
grep clone process_dump*

どの親が何を作成したかを確認するのに役立ちます。多分それはあなたを助けるだろう-少なくともその後、あなたは後方に検索することができます。

17
stackmate