2010-10-29 85 views
69

我用strace附加到一个短暂的过程。该进程创建了90个线程。当我发现有问题的线程时,我不得不单调地搜索父线程,然后是祖父线程,等等直到根进程。如何使用strace跟踪子进程?

有没有什么窍门或工具快速找出哪个线程创建了另一个?或者更好的是,打印像pstree这样的线程创建树?

回答

12

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

您可以使用-ff选项与-o filename生成多个文件(每个PID一个)。

如:

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

,这将有助于您了解哪些父创建的内容。也许这会帮助你 - 至少你可以向后搜索。

71

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

15

有一个叫strace-graph一个perl脚本。这是一个version from 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 box。

$ ./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% 

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

+0

很漂亮,这是几乎一模一样的东西我想至少数天。令人惊讶的是,我甚至可以在我的/ usr/share/doc/strace/examples /中看到它。 – mykhal 2013-12-03 15:59:18