2011-10-08 14 views
8

मुझे लिनक्स प्रक्रिया में pthread के धागे का पता लगाने के लिए कोई उपकरण नहीं मिला। मुझे स्ट्रेस/लेट्रेस की तरह कुछ चाहिए, क्या रीयल-टाइम में कॉल देखने के लिए कुछ है? धन्यवादलिनक्स में pthreads tracing?

उत्तर

14

स्ट्रेज थ्रेड के लिए भी काम करता है। सभी धागे को मुद्रित करने के लिए strace -f का उपयोग करें।

केवल एक विशेष धागा को रोकने के लिए, आपको सबसे पहले अपना टिड (थ्रेड आईडी) ढूंढना होगा। थ्रेड में थ्रेड आईडी है जो वास्तव में एक पिड (प्रक्रिया आईडी) है

एक बार जब आप थ्रेड के ढक्कन को जानते हैं, तो उस धागे को चिपकाने के लिए strace -p the_pid का उपयोग करें।

किसी प्रक्रिया में सभी धागे की पिड्स /proc/<pid>/task/ में पाई जा सकती हैं, या वर्तमान थ्रेड आईडी gettid() सी कॉल के साथ सीखा जा सकता है।

+0

वाह आपको बहुत धन्यवाद, मुझे सौ बार मदद मिलती है लेकिन मुझे नहीं लगता कि 'फॉलो फॉर्क्स' धागे दिखाएंगे – Sergey

+1

यह काम नहीं करता (मेरे लिए, वैसे भी)। अधिक विशिष्ट होने के लिए, मैं जिस धागे को देखना चाहता हूं उसे संलग्न करने के लिए मैं strace -f -p का उपयोग कर रहा हूं। जब भी यह एक नया सॉकेट कनेक्शन स्वीकार करता है तो यह इसे संभालने के लिए एक पाथ्रेड बनाता है, लेकिन स्ट्र्रेस नए थ्रेड में pthread_create कॉल का पालन नहीं करता है। – Michael

0

असल में स्ट्रेस परफ के रूप में उतना अच्छा नहीं है।

perf टूल का उपयोग करें, तो आप अधिक जानकारी प्राप्त कर सकते हैं।

उदाहरण के लिए, यदि आपका धागे से कुछ लटका हुआ है, और आप क्या कॉल कि लटका हुआ काम करता है पता लगाना चाहते हैं, उपयोग strace पीआईडी-आईडी -p सीमित जानकारी देता है, लेकिन पर्फ़ ऊपर, या पर्फ़ आयकर टीआईडी ​​अधिक

रिटर्न
संबंधित मुद्दे