จะติดตามกระบวนการย่อยโดยใช้ strace ได้อย่างไร?


105

ฉันเคยstraceแนบไปกับกระบวนการสั้น ๆ กระบวนการสร้าง 90 เธรด เมื่อฉันพบเธรดที่ไม่เหมาะสมฉันต้องค้นหาเธรดแม่อย่างน่าเบื่อจากนั้นเธรดปู่ย่าตายายและอื่น ๆ ไปจนถึงกระบวนการรูท

มีเคล็ดลับหรือเครื่องมือในการค้นหาว่าเธรดใดสร้างเธรดอื่นอย่างรวดเร็วหรือไม่? หรือยังดีกว่าพิมพ์ต้นไม้แห่งการสร้างเธรดเช่นpstree?


ดูเหมือนว่าคำตอบของ @JeRog ควรได้รับการยอมรับ
jww

คำตอบ:



19

ฉันมองไม่เห็นวิธีง่ายๆ:

คุณสามารถใช้-ffตัวเลือก-o filenameเพื่อสร้างไฟล์หลายไฟล์ (หนึ่งไฟล์ต่อ pid)

เช่น:

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

ซึ่งจะช่วยให้คุณเห็นว่าผู้ปกครองคนใดสร้างอะไร บางทีนั่นอาจช่วยคุณได้ - อย่างน้อยคุณก็สามารถค้นหาย้อนหลังได้


18

มี Perl strace-graphสคริปต์ที่เรียกว่าเป็น นี่คือรุ่นจาก GitHub มันมาพร้อมกับคอมไพเลอร์เวอร์ชันcrosstool-ng มันใช้ได้สำหรับฉันแม้กระทั่งใช้ข้ามแพลตฟอร์ม

กล่อง ARM Linux

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

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%

เอาต์พุตสามารถใช้เพื่อช่วยนำทางบันทึกการติดตามหลัก


1
ดีมากนี่เกือบจะเป็นสิ่งที่ฉันต้องการเป็นเวลาอย่างน้อยหลายวัน น่าแปลกใจที่ฉันสามารถดูได้ใน / usr / share / doc / strace / samples /
mykhal

0

หากต้องการดึงดูดการเข้าชมสำหรับกระบวนการเดียวคุณสามารถใช้ได้straceตามที่ @stackmate แนะนำ

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

หรือส่งออกไปยังไฟล์

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

-fสำหรับกระบวนการแยกทั้งหมด-sสำหรับขนาดสตริงที่จะพิมพ์และ-oเพื่อถ่ายโอนข้อมูลออกไปยังไฟล์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.