J'ai utilisé strace
pour m'attacher brièvement à un processus. Le processus a créé 90 threads. Lorsque j'ai trouvé le thread incriminé, j'ai dû chercher péniblement le thread parent, puis le thread grand-parent, et ainsi de suite jusqu'au processus racine.
Existe-t-il une astuce ou un outil pour déterminer rapidement quel fil en a créé un autre? Ou mieux encore, imprimez l’arborescence des créations de threads comme pstree
?
strace -f
Pour suivre le processus enfant qui est fork()
ed.
Il y a un script Perl appelé strace-graph
. Voici un version de github . Il est fourni avec les versions de crosstool-ng des compilateurs. Cela fonctionne pour moi même utilisé cross plate-forme.
$ ./strace -f -q -s 100 -o app.trc -p 449
$ tftp -pr app.trc 172.0.0.133
$ ./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 vous aider à naviguer dans le journal de trace principal.
Je ne peux pas voir un moyen facile:
Vous pouvez utiliser le -ff
option avec -o filename
pour 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, vous pourriez chercher en arrière.