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


104

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

どのスレッドが別のスレッドを作成したのかをすばやく把握するためのトリックやツールはありますか?または、より良い方法として、スレッド作成のツリーをpstree


@JeRogの回答を受け入れる必要があるようです。
jww 2018年

回答:



19

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

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

例えば:

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

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


18

という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%

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


1
とてもいいですね、これはほぼ正確に私が少なくとも数日間欲しかったものです。驚いたことに、/ usr / share / doc / strace / examples /でも確認できます。
mykhal 2013

0

strace@stackmateが提案するように、単一のプロセスのトラフィックをキャプチャするには、を使用できます。

strace -f -e trace=network -s 10000 -p <PID>;

または、ファイルに出力します。

strace -f -e trace=network -s 10000 -o dumpfile -p <PID>

-fフォークされたすべてのプロセス、-s文字列サイズ-oの出力、および出力をファイルにダンプします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.