Как отслеживать дочерний процесс с помощью strace?
Я strace
для краткого присоединения к процессу. Процесс создал 90 потоков. Когда я нашел оскорбительную нить, мне пришлось утомительно искать родительскую нить, затем нить бабушки и дедушки и так далее до самого корневого процесса.
есть ли трюк или инструмент, чтобы быстро выяснить, какой поток создал другой? Или еще лучше, распечатать дерево нитей творения, как pstree
?
3 ответов
есть скрипт strace-graph
. Вот это версия от github. Он упакован с crosstool-ng версиями компиляторов. Это работает для меня даже используется cross platform.
ARM Linux box.
$ ./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%
выходные данные можно использовать для навигации по основному журналу трассировки.
Я не вижу простого способа:
можно использовать С -o filename
для создания нескольких файлов (по одному на pid).
например:
strace -o process_dump -ff ./executable
grep clone process_dump*
это поможет вам увидеть, какой родитель создал что. Возможно, это поможет вам-по крайней мере, тогда вы сможете искать в обратном направлении.