Frage Wie verfolge ich den Prozess mit strace?


ich benutzte strace kurz an einen Prozess anhä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.

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


76
2017-10-29 15:09


Ursprung


Antworten:


strace -f kind Prozess zu verfolgen, das ist fork()ed.


77
2018-06-11 07:36



Es gibt ein Perl-Skript namens strace-graph. Hier ist ein Version von GitHub. Es ist verpackt mit Crosstool-ng Versionen von Compilern. 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.


16
2018-05-15 18:33



Ich kann keinen einfachen Weg sehen:

Du könntest das benutzen -ff Option mit -o filename um mehrere Dateien zu erzeugen (eine pro PID).

z.B:

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

Das würde Ihnen helfen zu sehen, welcher Elternteil was erstellt hat. Vielleicht würde dir das helfen - zumindest dann könntest du rückwärts suchen.


13
2018-04-29 20:05