如何使用strace跟踪子进程?

pro*_*ave 94 linux multithreading strace

我曾经strace简要地附上过程.该过程创建了90个线程.当我找到有问题的线程时,我不得不繁琐地搜索父线程,然后是祖父母线程,等等一直到根进程.

有没有一个技巧或工具可以快速找出哪个线程创建了另一个?或者更好的是,打印线程创建树pstree如何?

Je *_*Rog 104

strace -f跟踪已fork()编辑的子进程.

  • 值得注意的是,如果您将 strace 附加到已经运行的进程,则即使使用“-f”,也不会跟踪任何现有的子进程 (2认同)

art*_*ise 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
Run Code Online (Sandbox Code Playgroud)

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%
Run Code Online (Sandbox Code Playgroud)

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


sta*_*ate 17

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

您可以使用该-ff选项-o filename生成多个文件(每个pid一个).

例如:

strace -o process_dump -ff ./executable
grep clone process_dump*
Run Code Online (Sandbox Code Playgroud)

这将有助于你看到哪个父母创建了什么.也许这会对你有所帮助 - 至少你可以向后搜索.