क्या pthread_t
मान (pthread_create()
या std::thread::native_hanle()
से लौटा हुआ है) को लिनक्स में पिड (टिड) में मैप करने का कोई तरीका है? किसी को डुप्लिकेट-खुश होने से पहले, यह थ्रेड के स्वयं के पिड को खोजने के बारे में नहीं है (जिसे gettid()
के साथ किया जा सकता है)।pthread_t से pid (लिनक्स पर) को मानचित्र करने के लिए कैसे करें
पागल तरीका किसी भी तरह से थ्रेड को gettid()
पर कॉल करने के लिए मजबूर करेगा और परिणाम के साथ पास होगा, लेकिन यह बहुत अधिक परेशानी है।
मेरे मन में संभावित अनुप्रयोगों में से एक है प्रोग्राम के भीतर बनाए गए धागे को जोड़ना (जहां pthread_t
उपलब्ध है) ps -T
द्वारा प्रदान किए गए आउटपुट के साथ।
जहां तक मुझे पता है, लिनक्स में, 'pthread_t'' स्ट्रक्चर पर्थ्रेड 'के लिए एक सूचक है, जिसमें' tid' सदस्य है। लेकिन मुझे इस जानकारी को पढ़ने के लिए कोई स्वीकार्य तरीका नहीं पता है। यदि आपके पास डीबग प्रतीकों उपलब्ध हैं, तो आप इस संरचना को 'ptype pthread' के साथ gdb में देख सकते हैं। केवल डीबग उद्देश्यों के लिए, आप 't & ((pthread *) 0) -> tid' के साथ 'tid' के ऑफसेट को पढ़ सकते हैं, फिर' pthread_t' से 'tid' पढ़ने के लिए प्रोग्राम में इस ऑफसेट का उपयोग करें। या आप "पोर्टेबल" होने के लिए कुछ बौने पाठक लाइब्रेरी के साथ प्रतीक फ़ाइल से ऑफ़सेट को पढ़ सकते हैं। – geza
@geza वास्तव में बहुत दिलचस्प है, इस जानकारी के लिए धन्यवाद! – SergeyA
यह धागे के कार्यान्वयन के नीचे निर्भर करता है। linuxthreads के साथ जुड़े प्रक्रिया आईडी हो सकती है, 'getpid' इसे वापस करना चाहिए। पॉज़िक्स थ्रेड नहीं हो सकता है, इसलिए 'गेटपिड' मुख्य प्रक्रिया के पिड को वापस कर देगा। इसे जांचें: https://stackoverflow.com/a/19677227/1143850 – Serge