كيفية تتبع عملية الطفل باستخدام Strace؟
-
27-09-2019 - |
سؤال
إستعملت strace
لإرفاق عملية لفترة وجيزة. أنشأت العملية 90 موضوعًا. عندما وجدت الخيط المخالف ، اضطررت إلى البحث عن خيط الأصل ، ثم الخيط الجد ، وهكذا على طول الطريق إلى عملية الجذر.
هل هناك خدعة أو أداة لمعرفة الخيط الذي تم إنشاؤه بسرعة أخرى؟ أو الأفضل من ذلك ، اطبع شجرة إبداعات الخيط مثل pstree
?
المحلول
strace -f
لتتبع عملية الطفل fork()
إد.
نصائح أخرى
يوجد نص Perl يسمى strace-graph
. هنا نسخة من جيثب. يتم تعبئتها مع crosstool-ng إصدارات المترجمين. إنه يعمل بالنسبة لي حتى تستخدم منصة متقاطعة.
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%
يمكن استخدام الإخراج للمساعدة في التنقل في سجل التتبع الرئيسي.
لا أستطيع رؤية طريقة سهلة:
يمكنك استخدام -ff
الخيار مع -o filename
لإنتاج ملفات متعددة (واحدة لكل PID).
على سبيل المثال:
strace -o process_dump -ff ./executable
grep clone process_dump*
هذا من شأنه أن يساعدك على معرفة أي الوالد الذي خلق ما. ربما من شأنه أن يساعدك - على الأقل بعد ذلك يمكنك البحث للخلف.