Как отслеживать дочерний процесс с помощью strace?
Я strace
для краткого присоединения к процессу. Процесс создал 90 потоков. Когда я нашел оскорбительную нить, мне пришлось утомительно искать родительскую нить, затем нить бабушки и дедушки и так далее до самого корневого процесса.
есть ли трюк или инструмент, чтобы быстро выяснить, какой поток создал другой? Или еще лучше, распечатать дерево нитей творения, как pstree
?
3 ответа:
есть скрипт perl под названием
strace-graph
. Вот это версия от github. Он упакован с crosstool-ng версиями компиляторов. Он работает для меня даже использовал кросс-платформу.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*
это поможет вам увидеть, какой родитель создал то, что. Может быть, это поможет вам - по крайней мере, тогда вы сможете искать в обратном направлении.