我用strace
简单地附加到一个过程。 该进程创build了90个线程。 当我发现有问题的线程时,我不得不单调地search父线程,然后是祖父线程,一直到根进程。
有没有一个技巧或工具来快速找出哪个线程创build另一个线程? 或者更好的是,像pstree
一样打印线程创build树?
strace -f
跟踪fork()
子进程。
有一个叫做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%
输出可用于帮助导航主跟踪日志。
我看不到一个简单的方法:
你可以使用带-o filename
选项的-ff
选项产生多个文件(每个pid一个)。
例如:
strace -o process_dump -ff ./executable grep clone process_dump*
这将帮助你看到哪个父母创造了什么。 也许这会帮助你 – 至少你可以向后搜索。