J'avais l'habitude strace
de 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
?
linux
multithreading
strace
projets ont
la source
la source
Réponses:
strace -f
pour tracer le processus enfant qui estfork()
ed.la source
Je ne vois pas un moyen facile:
Vous pouvez utiliser l'
-ff
option avec-o filename
pour produire plusieurs fichiers (un par pid).par exemple:
cela vous aiderait à voir quel parent a créé quoi. Peut-être que cela vous aiderait - au moins alors vous pourriez rechercher en arrière.
la source
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.
Boîte Linux X86_64.
La sortie peut être utilisée pour faciliter la navigation dans le journal de suivi principal.
la source
Pour capturer le trafic pour un seul processus, vous pouvez utiliser
strace
, comme @stackmate l'a suggéré.ou le sortir dans un fichier.
-f
pour tous les processus fourchus,-s
pour la taille de chaîne à imprimer et-o
pour vider la sortie dans un fichier.la source