如何使用strace跟踪subprocess?

我用strace简单地附加到一个过程。 该进程创build了90个线程。 当我发现有问题的线程时,我不得不单调地search父线程,然后是祖父线程,一直到根进程。

有没有一个技巧或工具来快速找出哪个线程创build另一个线程? 或者更好的是,像pstree一样打印线程创build树?

strace -f跟踪fork()子进程。

有一个叫做strace-graph的perl脚本。 这里是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% 

输出可用于帮助导航主跟踪日志。

我看不到一个简单的方法:

你可以使用带-o filename选项的-ff选项产生多个文件(每个pid一个)。

例如:

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

这将帮助你看到哪个父母创造了什么。 也许这会帮助你 – 至少你可以向后搜索。