Jak śledzić proces potomny za pomocą strace?


104

Kiedyś stracena krótko przywiązywałem się do procesu. W wyniku tego procesu powstało 90 wątków. Kiedy znalazłem problematyczny wątek, musiałem żmudnie wyszukiwać wątek nadrzędny, następnie wątek dziadka i tak dalej, aż do procesu rootowania.

Czy jest jakaś sztuczka lub narzędzie, aby szybko dowiedzieć się, który wątek utworzył inny? Albo jeszcze lepiej, wydrukuj drzewo kreacji nici jak pstree?


Wygląda na to, że odpowiedź @JeRog powinna zostać zaakceptowana.
jww

Odpowiedzi:


119

strace -fdo śledzenia procesu potomnego, który jest fork()wyd.


19

Nie widzę łatwego sposobu:

Możesz użyć -ffopcji z -o filenamedo tworzenia wielu plików (po jednym na pid).

na przykład:

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

to pomoże ci zobaczyć, który rodzic stworzył co. Może to by ci pomogło - przynajmniej wtedy możesz szukać wstecz.


18

Istnieje skrypt perl o nazwie strace-graph. Oto wersja z github . Jest dostarczany z wersjami kompilatorów typu crosstool-ng . U mnie działa nawet na wielu platformach.

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%

Dane wyjściowe mogą pomóc w nawigacji w głównym dzienniku śledzenia.


1
bardzo ładnie, prawie dokładnie to chciałem przez co najmniej kilka dni. o dziwo, widzę to nawet w moim / usr / share / doc / strace / examples /.
mykhal

0

Aby przechwycić ruch dla pojedynczego procesu, możesz użyć strace, jak sugerował @stackmate.

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

lub wyślij go do pliku.

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

-fdla całego rozwidlonego procesu, -sdla rozmiaru łańcucha do wydrukowania i -ozrzucenia wyniku do pliku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.