Раньше я strace
вкратце привязывался к процессу. В процессе создано 90 потоков. Когда я нашел проблемный поток, мне пришлось утомительно искать родительский поток, затем дедушку и дедушку, и так далее, вплоть до корневого процесса.
Есть ли уловка или инструмент, чтобы быстро выяснить, какой поток создал другой? А еще лучше распечатать дерево создания нитей вроде pstree
?
linux
multithreading
strace
проекты имеют
источник
источник
Ответы:
strace -f
для отслеживания дочернего процесса, которыйfork()
редактируется.источник
Я не вижу простого пути:
Вы можете использовать
-ff
опцию с-o filename
для создания нескольких файлов (по одному на pid).например:
это поможет вам увидеть, какой родитель что создал. Может быть, это поможет вам - по крайней мере, тогда вы сможете искать в обратном направлении.
источник
Есть скрипт на perl, который называется
strace-graph
. Вот версия с гитхаба . Он упакован с версиями компиляторов crossstool-ng . У меня работает даже кросс-платформа.Коробка ARM Linux.
Коробка Linux x86_64.
Выходные данные можно использовать для навигации по основному журналу трассировки.
источник
Чтобы захватить трафик для одного процесса, вы можете использовать
strace
, как предлагает @stackmate.или вывести в файл.
-f
для всего разветвленного процесса,-s
для размера строки для печати и-o
для вывода вывода в файл.источник