Como rastrear o processo filho usando o strace?


104

Eu costumava straceanexar a um processo brevemente. O processo criou 90 threads. Quando eu encontrei o thread ofensivo, tive que procurar tediosamente pelo thread pai, depois pelo thread dos avós e assim por diante até o processo raiz.

Existe um truque ou ferramenta para descobrir rapidamente qual thread criou outro? Ou melhor ainda, imprimir a árvore de criações de fios como pstree?


Parece que a resposta @JeRog deve ser aceita.
jww

Respostas:


119

strace -fpara rastrear o processo filho fork()ed.


19

Não consigo ver uma maneira fácil:

Você pode usar a -ffopção com -o filenamepara produzir vários arquivos (um por pid).

por exemplo:

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

isso ajudaria você a ver qual pai criou o quê. Talvez isso o ajude - pelo menos você poderia pesquisar para trás.


18

Existe um script perl chamado strace-graph. Aqui está uma versão do github . É empacotado com versões crosstool-ng de compiladores. Funciona para mim mesmo usando plataforma cruzada.

Caixa ARM Linux.

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

Caixa do 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%

A saída pode ser usada para ajudar a navegar no log de rastreamento principal.


1
muito bom, isso é quase exatamente algo que eu queria há pelo menos vários dias. surpreendentemente, posso até ver em meu / usr / share / doc / strace / examples /.
mykhal

0

Para capturar o tráfego para um único processo, você pode usar strace, como sugeriu @stackmate.

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

ou enviá-lo para um arquivo.

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

-fpara todos os processos bifurcados, -spara imprimir o tamanho da string e -opara despejar a saída em um arquivo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.