我使用 strace简要地附加到一个进程。该进程创建了90个线程。当我发现有问题的线程时,我不得不冗长地搜索父线程,然后是祖线程,等等,一直到根进程。
strace
是否有一种技巧或工具可以快速找出哪个线程创建了另一个线程?或者更好的是,打印线程创建树,如 pstree?
pstree
我想不出一个简单的办法:
您可以在 -o filename中使用 -ff选项来生成多个文件(每个 pid 一个)。
-o filename
-ff
例如:
strace -o process_dump -ff ./executable grep clone process_dump*
可以帮助你看到哪个父母创造了什么。也许这会对你有所帮助——至少这样你就可以反向搜索了。
追踪 strace -f的子进程。
strace -f
有一个名为 strace-graph的 perl 脚本。这是 来自 Github 的版本。它与编译器的 十字凳版本打包在一起。我甚至可以使用跨平台。
strace-graph
$ ./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%
输出可用于帮助导航主跟踪日志。
按照@stackmate 的建议,可以使用 strace捕获单个进程的流量。
strace -f -e trace=network -s 10000 -p <PID>;
或者输出到一个文件中。
strace -f -e trace=network -s 10000 -o dumpfile -p <PID>
-f用于所有分叉进程,-s用于打印字符串大小,-o用于将输出转储到文件中。
-f
-s
-o