2009-04-22 12 views
38

मेरे पास सी/सी ++ में लिखा गया एक बहुप्रचारित लिनक्स एप्लिकेशन है। मेरे पास chosen names for my threads है। डीबगिंग की सहायता के लिए, मैं इन नामों को जीडीबी, "टॉप", आदि में दिखाना चाहता हूं। क्या यह संभव है, और यदि ऐसा है तो कैसे?लिनक्स में धागे का नाम कैसे लगाएं?

(reasons to know the thread name के बहुत सारे हैं। अभी मैं जानना चाहता हूं कि कौन सा धागा 50% सीपीयू (जैसा कि 'शीर्ष' द्वारा रिपोर्ट किया गया है) ले रहा है। और जब डीबगिंग करते हैं तो मुझे अक्सर एक अलग थ्रेड पर स्विच करने की आवश्यकता होती है - वर्तमान में मेरे पास है "thread apply all bt" करने के लिए "सही थ्रेड खोजने के लिए बैकट्रैक आउटपुट के पृष्ठों को देखें)।

Windows solution is here; लिनक्स क्या है?

+0

संबंधित प्रश्न: http://stackoverflow.com/questions/5026531/thread-name-longer-than-15-chars – user9876

उत्तर

41

पॉज़िक्स थ्रेड?

यह स्पष्ट रूप से संकलित नहीं होगा, लेकिन यह आपको शिकार कहां जाना है इसका एक विचार देगा। मुझे यह भी यकीन नहीं है कि यह सही PR_ कमांड है, लेकिन मुझे लगता है कि यह है। यह एक समय हो गया है ...

#include <sys/prctl.h> 
    prctl(PR_SET_NAME,"<null> terminated string",0,0,0) 
+6

यह काम करता है, धन्यवाद! प्रलेखन का कहना है कि PR_SET_NAME प्रक्रिया का नाम सेट करता है; लेकिन वह दस्तावेज गलत है - यह वास्तव में धागा नाम सेट करता है। अब "टॉप" और "पीएस-एल" थ्रेड नाम दिखाएं। – user9876

+0

खुशी हुई यह काम किया, मुझे यकीन नहीं था कि यह इसके लिए सही दाएं भी था, :) – Fusspawn

+0

मैंने हमेशा थ्रेड के स्टैक-ट्रेस में दिखाए गए स्टार्ट फ़ंक्शन के आधार पर धागे की पहचान की है। यह जानकर अच्छा लगा कि एक साफ विकल्प है। – veefu

14

आप किसी लाइब्रेरी ACE तरह Thread जब एक नया धागा बनाने धागा नाम निर्दिष्ट करने के एक तरीका है प्रयोग कर रहे हैं।

बीएसडी यूनिक्स में pthread_set_name_np कॉल भी है।

अन्यथा आप prctl का उपयोग कर सकते हैं जैसा कि फस्स्पॉन द्वारा उल्लिखित है।

+9

लिनक्स पर इसे 'pthread_setname_np' कहा जाता है और इसे glibc 2.11.2 में जोड़ा गया था। – Nemo

+2

[यह] (http://stackoverflow.com/questions/2369738/can-i-set-the-name-of-a-thread-in-pthreads-linux) शायद, सबसे विस्तृत उत्तर है विषय। –

संबंधित मुद्दे