Comment suivre le processus enfant à l'aide de strace?


104

J'avais l'habitude stracede m'attacher brièvement à un processus. Le processus a créé 90 threads. Lorsque j'ai trouvé le fil offensant, j'ai dû rechercher fastidieusement le fil parent, puis le fil des grands-parents, et ainsi de suite jusqu'au processus racine.

Existe-t-il une astuce ou un outil pour déterminer rapidement quel thread en a créé un autre? Ou mieux encore, imprimez l'arbre des créations de fils comme pstree?


Il semble que la réponse @JeRog devrait être acceptée.
jww

Réponses:


119

strace -fpour tracer le processus enfant qui est fork()ed.


19

Je ne vois pas un moyen facile:

Vous pouvez utiliser l' -ffoption avec -o filenamepour produire plusieurs fichiers (un par pid).

par exemple:

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

cela vous aiderait à voir quel parent a créé quoi. Peut-être que cela vous aiderait - au moins alors vous pourriez rechercher en arrière.


18

Il existe un script perl appelé strace-graph. Voici une version de github . Il est fourni avec les versions crosstool-ng des compilateurs. Cela fonctionne pour moi même utilisé multi-plateforme.

Boîte ARM Linux.

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

Boîte 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%

La sortie peut être utilisée pour faciliter la navigation dans le journal de suivi principal.


1
très sympa, c'est presque exactement quelque chose que je voulais depuis au moins plusieurs jours. étonnamment, je peux même le voir dans mon / usr / share / doc / strace / examples /.
mykhal

0

Pour capturer le trafic pour un seul processus, vous pouvez utiliser strace, comme @stackmate l'a suggéré.

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

ou le sortir dans un fichier.

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

-fpour tous les processus fourchus, -spour la taille de chaîne à imprimer et -opour vider la sortie dans un fichier.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.