2010-10-29 12 views
69

Ich verwendete strace, um an einen Prozess kurz anzuhängen. Der Prozess erstellt 90 Threads. Als ich den anstößigen Thread fand, musste ich mühsam nach dem übergeordneten Thread suchen, dann nach dem Großeltern-Thread und so weiter bis zum Root-Prozess.Wie verfolgen Sie den Kindprozess mit strace?

Gibt es einen Trick oder ein Tool, um schnell herauszufinden, welcher Thread einen anderen erstellt hat? Oder noch besser, drucken Sie den Baum der Thread-Kreationen wie pstree?

Antwort

12

Ich kann nicht eine einfache Möglichkeit sehen:

Sie konnten die -ff Option mit -o filename verwenden, um mehrere Dateien (eine pro pid) zu erzeugen.

zB:

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

, die Sie würde helfen, zu sehen, welcher Elternteil, was geschaffen. Vielleicht würde dir das helfen - zumindest dann könntest du rückwärts suchen.

71

strace -f zu verfolgen unterprozess ist fork() ed.

15

Es gibt ein Perl-Skript namens strace-graph. Hier ist ein version from github. Es ist mit crosstool-ng Versionen von Compilern verpackt. Es funktioniert bei mir sogar plattformübergreifend.

ARM Linux-Box.

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

X86_64 Linux-Box.

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

Die Ausgabe kann verwendet werden, um beim Navigieren im Hauptverfolgungsprotokoll zu helfen.

+0

sehr schön, das ist fast genau etwas, was ich für mindestens mehrere Tage wollte. Überraschenderweise kann ich es sogar in meinem/usr/share/doc/strace/examples/sehen. – mykhal

Verwandte Themen