Bagaimana cara melacak proses anak menggunakan strace?

104

Saya dulu strace melampirkan proses sebentar. Prosesnya menciptakan 90 utas. Ketika saya menemukan utas yang menyinggung, saya harus mencari utas induk, lalu utas kakek, dan seterusnya sampai proses root.

Apakah ada trik atau alat untuk mengetahui dengan cepat utas mana yang membuat utas lain? Atau lebih baik lagi, mencetak pohon kreasi benang seperti pstree?

projectshave
sumber
Sepertinya jawaban @JeRog harus diterima.
jww

Jawaban:

119

strace -funtuk melacak proses anak yang fork()diedit.

Je Rog
sumber
19

Saya tidak bisa melihat cara yang mudah:

Anda dapat menggunakan -ffopsi dengan -o filenameuntuk 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 Anda bisa mencari ke belakang.

stackmate
sumber
18

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

Kotak ARM Linux.

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

Kotak X86_64 Linux.

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

Keluarannya dapat digunakan untuk membantu menavigasi log jejak utama.

kebisingan tanpa seni
sumber
1
sangat bagus, ini hampir persis seperti yang saya inginkan setidaknya selama beberapa hari. yang mengejutkan, saya bahkan dapat melihatnya di / usr / share / doc / strace / example / saya.
mykhal
0

Untuk menangkap lalu lintas untuk satu proses, Anda dapat menggunakan strace, seperti yang disarankan @stackmate.

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

atau output ke file.

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

-funtuk semua proses bercabang, -suntuk ukuran string yang akan dicetak, dan -ountuk membuang output ke file.

Shaboti
sumber