Pertanyaan Bagaimana cara melacak proses anak menggunakan strace?


Saya menggunakan strace untuk melampirkan ke suatu proses secara singkat. Proses ini menciptakan 90 utas. Ketika saya menemukan benang yang mengganggu, saya harus mencari-cari benang induk, lalu benang neneknya, dan seterusnya sampai ke proses root.

Apakah ada trik atau alat untuk mengetahui dengan cepat untaian mana yang dibuat? Atau lebih baik lagi, cetak pohon kreasi benang seperti pstree?


76
2017-10-29 15:09


asal


Jawaban:


strace -f untuk melacak proses anak itu fork()ed.


77
2018-06-11 07:36



Ada skrip perl yang disebut strace-graph. Ini dia versi dari github. Itu dikemas dengan crosstool-ng versi kompiler. Ia bekerja untuk saya bahkan menggunakan platform lintas.

Kotak ARM Linux.

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

Kotak Linux X86_64.

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

Output dapat digunakan untuk membantu menavigasi log jejak utama.


16
2018-05-15 18:33



Saya tidak bisa melihat cara mudah:

Anda bisa menggunakan -ff opsi dengan -o filename untuk menghasilkan banyak file (satu per pid).

misalnya:

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

yang akan membantu Anda melihat orang tua mana yang membuat apa. Mungkin itu akan membantu Anda - setidaknya kemudian Anda bisa mencari ke belakang.


13
2018-04-29 20:05