से पिड कैसे प्राप्त करें, प्रत्येक पाथ्रेड एक पिड पर मैपिंग कर रहा है, जिसे हॉप जैसे टूल में निगरानी की जा सकती है। लेकिन मैं धागे की पिड कैसे प्राप्त कर सकता हूं? getpid() बस मुख्य धागे की पिड वापस करें।आरएच लिनक्स में pthread
उत्तर
बुला धागे की आईडी वापस जाने के लिए कहा जा सकता है।
इसके अलावा पीआईडी प्रक्रिया आईडी है, एक थ्रेड में थ्रेड आईडी नहीं है पीआईडी। एक ही प्रक्रिया में चल रहे सभी धागे एक ही पीआईडी होंगे।
अलस डाउनवोट इसलिए है क्योंकि आप जो कह रहे हैं वह गलत है। लिनक्स धागे वास्तव में एक पिड द्वारा प्रतिनिधित्व किया जा सकता है, क्योंकि वे हल्के प्रक्रियाएं हैं। वास्तव में निम्नलिखित कार्य Linux unistd.h में मौजूद है: pid_t gettid (शून्य)।दूसरी तरफ, विंडोज़ में स्वतंत्र स्वतंत्र धागे आईडी हैं। – ThreeBit
एक पीआईडी एक प्रोसेस आईडी है, न कि थ्रेड आईडी। एक ही प्रक्रिया पर चल रहे धागे स्पष्ट रूप से सभी एक ही पीआईडी से जुड़े होंगे।
क्योंकि pthreads पोर्टेबल होने का प्रयास करता है तो आप सीधे अंतर्निहित ओएस थ्रेड की आईडी प्राप्त नहीं कर सकते हैं। यह भी संभव है कि एक अंतर्निहित ओएस धागा नहीं है।
या इसके बजाय, चूंकि एनपीटीएल धागे अब नहीं हैं प्रक्रियाओं के रूप में पंजीकृत है। –
मुझे लगता है कि समारोह आप देख रहे हैं pthread_self
धागे TIDs (threadIds) है, और सभी थ्रेड एक ही प्रक्रिया (पीआईडी) में चलाते हैं। तो, आपके धागे में सभी एक ही पिड को मानते हैं कि वे एक ही प्रक्रिया में बनाए गए हैं, तो उनके पास अलग-अलग बोलियां होंगी।
pthread_self() टिड देता है, और getpid() को पिड मिलता है।
दो धागे मान हैं जो भ्रमित हो जाते हैं। pthread_self() POSIX थ्रेड आईडी वापस करेगा; gettid() ओएस थ्रेड आईडी वापस कर देगा। उत्तरार्द्ध लिनक्स विशिष्ट है और पोर्टेबल होने की गारंटी नहीं है, लेकिन शायद आप वास्तव में क्या देख रहे हैं।
संपादित PlasmaHH नोटों के रूप में, gettid()
syscall()
के माध्यम से कहा जाता है। syscall()
आदमी पृष्ठ से:
#define _GNU_SOURCE
#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
int
main(int argc, char *argv[])
{
pid_t tid;
tid = syscall(SYS_gettid);
}
ध्यान दें कि gettid() में कोई glibc wrapper नहीं है और syscall() – PlasmaHH
@ PlasmaHH के माध्यम से कॉल करने की आवश्यकता है - ठीक है, मुझे इसे जोड़ना चाहिए। सौभाग्य से syscall मैन पेज इसे एक उदाहरण के रूप में उपयोग करता है। – Duck
गेटिड() एक प्रकार का [विवादास्पद] है (http://airlied.livejournal.com/74826.html) –
pthread_self नहीं टीआईडी प्राप्त करता है। यह pthread कार्यों में उपयोग के लिए pthread_t प्रकार के हैंडल या सूचक को साबित करता है।
एक उदाहरण के लिए यहाँ देखो क्या एक वास्तविक दुनिया कार्यक्रम वापस कर सकती है:
असल pthread_self
वापसी pthread_t
और नहीं एक पूर्णांक धागा आईडी आप के साथ काम कर सकते हैं, तो निम्न सहायक समारोह आप में है कि मिल जाएगा विभिन्न POSIX सिस्टम भर में एक पोर्टेबल तरीका।
uint64_t gettid() {
pthread_t ptid = pthread_self();
uint64_t threadId = 0;
memcpy(&threadId, &ptid, std::min(sizeof(threadId), sizeof(ptid)));
return threadId;
}
- 1. pthread नींद लिनक्स
- 2. जेनकिंस/हडसन सीआई लिनक्स आरएच इंस्टॉलेशन
- 3. pthread लाइब्रेरी स्थान
- 4. pthread समारोह
- 5. क्या सबसे सही तरीका pthread
- 6. pthread सिंक्रनाइज़ अवरुद्ध कतार
- 7. थ्रेड बनाम pthread perl
- 8. Pthread सशर्त संकेत - उम्मीद
- 9. pthread कार्यों "_np" प्रत्यय
- 10. pthread (सेगमेंटेशन गलती)
- 11. pthread लाइब्रेरी अपरिभाषित संदर्भ
- 12. लिनक्स में pthreads tracing?
- 13. pthread में PTHREAD_CREATE_JOINABLE का उपयोग क्या है?
- 14. अजीब आउटपुट जब मैं pthread और printf
- 15. लिनक्स
- 16. लिनक्स
- 17. pthread- जैसे विंडोज मैनुअल-रीसेट इवेंट
- 18. एक pthread mutex की "विशेषता" क्या है?
- 19. DevC++ में pthread लाइब्रेरी का उपयोग कैसे करें?
- 20. लिनक्स
- 21. आरएच वातावरण में हैश आइटम के माध्यम से कैसे पुनरावृत्त करें?
- 22. क्या मैं एक pthread के अंदर एक pthread बना सकते हैं, जो पहले से ही मुख्य द्वारा बनाया गया है?
- 23. लिनक्स
- 24. क्यों makecontext वर्तमान pthread कार्यान्वयन, makecontext प्रोग्राम जो pthread (3) पुस्तकालय के खिलाफ लिंक में नहीं किया जाना चाहिए में सीमाओं के कारण pthreads
- 25. लिनक्स
- 26. एक pthread रिलीज malloced स्मृति से बाहर निकलता है?
- 27. क्या साझा स्मृति में pthread mutexes धागे में काम करते हैं?
- 28. लिनक्स में क्लासपाथ सीमा
- 29. लिनक्स - आईपीथॉन में लाइनब्रेक
- 30. लिनक्स सर्वर (टर्मिनल में)
[लिनक्स 2.6 NPTL के साथ बदल दिया LinuxThreads] (http://drdobbs.com/open-source/184406204), लिनक्स अब POSIX अनुसरण करता है और सही ढंग से प्रत्येक थ्रेड के लिए एक ही पीआईडी देता है। –
आपको उन उत्तरों को स्वीकार करने पर विचार करना चाहिए जिन्हें आप उपयोगी पाते हैं। –
स्टीव-ओ: शायद ऐसा है, लेकिन लिनक्स अभी भी प्रत्येक थ्रेड के लिए एक अलग प्रक्रिया बनाता है (प्रत्येक थ्रेड को अपना/proc/ मिलता है, जहां मुख्य थ्रेड/प्रक्रिया से अलग है) –
Rahly