121

straceはプロセスに簡単に接続していました。このプロセスにより、90 個のスレッドが作成されました。問題のあるスレッドを見つけたとき、親スレッド、次に親スレッド、というようにルート プロセスに至るまで、退屈な検索をしなければなりませんでした。

どのスレッドが別のスレッドを作成したかをすばやく把握するためのトリックまたはツールはありますか? または、さらに良いことに、次のようなスレッド作成のツリーを印刷しますpstree

4

4 に答える 4

147

strace -ffork()edされた子プロセスをトレースします。

于 2011-06-11T07:36:58.737 に答える
27

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

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

例えば:

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

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

于 2011-04-29T20:05:19.193 に答える
23

というPerlスクリプトがありますstrace-graphこれは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%

出力は、メインのトレース ログをナビゲートするために使用できます。

于 2013-05-15T18:33:23.067 に答える