私strace
はプロセスに簡単に接続していました。このプロセスにより、90 個のスレッドが作成されました。問題のあるスレッドを見つけたとき、親スレッド、次に親スレッド、というようにルート プロセスに至るまで、退屈な検索をしなければなりませんでした。
どのスレッドが別のスレッドを作成したかをすばやく把握するためのトリックまたはツールはありますか? または、さらに良いことに、次のようなスレッド作成のツリーを印刷しますpstree
。
私strace
はプロセスに簡単に接続していました。このプロセスにより、90 個のスレッドが作成されました。問題のあるスレッドを見つけたとき、親スレッド、次に親スレッド、というようにルート プロセスに至るまで、退屈な検索をしなければなりませんでした。
どのスレッドが別のスレッドを作成したかをすばやく把握するためのトリックまたはツールはありますか? または、さらに良いことに、次のようなスレッド作成のツリーを印刷しますpstree
。
strace -f
fork()
edされた子プロセスをトレースします。
簡単な方法がわかりません:
-ff
with オプションを使用し-o filename
て、複数のファイル (pid ごとに 1 つ) を生成できます。
例えば:
strace -o process_dump -ff ./executable
grep clone process_dump*
これは、どの親が何を作成したかを確認するのに役立ちます。多分それはあなたを助けるでしょう-少なくともそれからあなたは逆方向に検索することができます.
というPerlスクリプトがありますstrace-graph
。これは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%
出力は、メインのトレース ログをナビゲートするために使用できます。