strace
を使用して、プロセスに簡単にアタッチしました。プロセスは90個のスレッドを作成しました。問題のあるスレッドを見つけたとき、親プロセス、次に祖父母スレッドなどをルートプロセスまでずっと退屈に検索する必要がありました。
どのスレッドが別のスレッドを作成したかをすばやく把握するためのトリックやツールはありますか?それとも、pstree
のようなスレッド作成のツリーを出力しますか?
_strace -f
_は、fork()
edである子プロセスをトレースします。
strace-graph
というPerlスクリプトがあります。 githubからのバージョン です。 crosstool-ngバージョンのコンパイラにパッケージされています。クロスプラットフォームでも使用できます。
$ ./strace -f -q -s 100 -o app.trc -p 449
$ tftp -pr app.trc 172.0.0.133
$ ./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%
出力を使用して、メイントレースログをナビゲートすることができます。
簡単な方法がわかりません。
-ff
オプションと-o filename
を使用して、複数のファイル(pidごとに1つ)を作成できます。
例えば:
strace -o process_dump -ff ./executable
grep clone process_dump*
どの親が何を作成したかを確認するのに役立ちます。多分それはあなたを助けるだろう-少なくともその後、あなたは後方に検索することができます。