Как отслеживать дочерний процесс с помощью strace?

104

Раньше я straceвкратце привязывался к процессу. В процессе создано 90 потоков. Когда я нашел проблемный поток, мне пришлось утомительно искать родительский поток, затем дедушку и дедушку, и так далее, вплоть до корневого процесса.

Есть ли уловка или инструмент, чтобы быстро выяснить, какой поток создал другой? А еще лучше распечатать дерево создания нитей вроде pstree?

проекты имеют
источник
Похоже, ответ @JeRog следует принять.
jww

Ответы:

119

strace -fдля отслеживания дочернего процесса, который fork()редактируется.

Je Rog
источник
19

Я не вижу простого пути:

Вы можете использовать -ffопцию с -o filenameдля создания нескольких файлов (по одному на pid).

например:

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

это поможет вам увидеть, какой родитель что создал. Может быть, это поможет вам - по крайней мере, тогда вы сможете искать в обратном направлении.

товарищ по стеку
источник
18

Есть скрипт на perl, который называется strace-graph. Вот версия с гитхаба . Он упакован с версиями компиляторов crossstool-ng . У меня работает даже кросс-платформа.

Коробка ARM Linux.

$ ./strace -f -q -s 100 -o app.trc -p 449
$ tftp -pr app.trc 172.0.0.133

Коробка Linux x86_64.

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

Выходные данные можно использовать для навигации по основному журналу трассировки.

бесхитростный шум
источник
1
очень хорошо, это почти именно то, чего я хотел по крайней мере несколько дней. как ни странно, я даже вижу это в моем / usr / share / doc / strace / examples /.
михал 03
0

Чтобы захватить трафик для одного процесса, вы можете использовать strace, как предлагает @stackmate.

strace -f -e trace=network -s 10000 -p <PID>;

или вывести в файл.

strace -f -e trace=network -s 10000 -o dumpfile -p <PID>

-fдля всего разветвленного процесса, -sдля размера строки для печати и -oдля вывода вывода в файл.

Шаботи
источник