लिनक्स पर, जावा धागे देशी धागे के साथ कार्यान्वित किए जाते हैं, इसलिए धागे का उपयोग कर एक जावा प्रोग्राम थ्रेड का उपयोग करके देशी प्रोग्राम से अलग नहीं होता है। एक "जावा थ्रेड" एक जेवीएम प्रक्रिया से संबंधित एक धागा है।
एक आधुनिक लिनक्स सिस्टम (एनपीटीएल का उपयोग करने वाले) पर, किसी प्रक्रिया से संबंधित सभी थ्रेडों में एक ही प्रक्रिया आईडी और पैरेंट प्रोसेस आईडी होती है, लेकिन विभिन्न थ्रेड आईडी होती हैं। आप ps -eLf
चलाकर इन आईडी को देख सकते हैं। पीआईडी कॉलम प्रक्रिया आईडी है, पीपीआईडी कॉलम पेरेंट प्रोसेस आईडी है, और एलडब्ल्यूपी कॉलम थ्रेड (लाइटवेइट प्रोसेस) आईडी है। "मुख्य" थ्रेड में एक थ्रेड आईडी होती है जो प्रक्रिया आईडी के समान होती है, और अतिरिक्त थ्रेड में अलग-अलग थ्रेड आईडी मान होंगे।
पुराने लिनक्स सिस्टम "लिनक्सथ्रेड" थ्रेडिंग कार्यान्वयन का उपयोग कर सकते हैं, जो एनपीटीएल के बजाय पूरी तरह से पॉज़िक्स-अनुरूप नहीं है। Linuxthreads सिस्टम पर, धागे की अलग प्रक्रिया आईडी होती है।
आप जांच सकते हैं कि आपका सिस्टम सिस्टम की सी लाइब्रेरी (libc) को एक स्टैंडअलोन प्रोग्राम के रूप में चलाकर और उसके आउटपुट में "उपलब्ध एक्सटेंशन" के अंतर्गत देखकर एनपीटीएल या लिनक्सथ्रेड का उपयोग कर रहा है या नहीं। इसे या तो "मूल पॉज़िक्स थ्रेड लाइब्रेरी" या लिनक्सथ्रेड का उल्लेख करना चाहिए। सी लाइब्रेरी का मार्ग सिस्टम से सिस्टम में भिन्न होता है: यह /lib/libc.so.6
, /lib64/libc.so.6
(64-बिट रेडहाट-आधारित सिस्टम पर), या /lib/x86_64-linux-gnu/libc.so.6
(आधुनिक डेबियन-आधारित सिस्टम जैसे उबंटू) पर हो सकता है।
ओएस स्तर पर, पैरों के नाम नहीं हैं; वे केवल जेवीएम के भीतर मौजूद हैं।
pthread_kill()
सी फ़ंक्शन का उपयोग किसी विशिष्ट थ्रेड को सिग्नल भेजने के लिए किया जा सकता है, जिसे आप JVM के बाहर से उस विशिष्ट थ्रेड को मारने का प्रयास करने के लिए उपयोग कर सकते हैं, लेकिन मुझे नहीं पता कि JVM इसका जवाब कैसे देगा। यह सिर्फ पूरे जेवीएम को मार सकता है।
स्टीफन सी, मैं सीख रहा हूं कि लिनक्स थ्रेड नामकरण और जावा थ्रेड नामकरण कैसे संबंधित हैं। और साथ ही, लिनक्स के भीतर कैसे JVM थ्रेड प्रबंधन प्रबंधित किया जाता है। – karthi