2011-11-28 14 views
9

जावा कोड जेवीएम के लिए एक अद्वितीय पहचानकर्ता कैसे प्राप्त कर सकता है जिसमें यह चल रहा है? यूनिक्स सिस्टम पर, जो मैं खोज रहा हूं उसका एक उदाहरण उस प्रक्रिया का पीआईडी ​​होगा जिसमें JVM चल रहा है (JVM और प्रक्रियाओं के बीच एक-से-एक मैपिंग मानना)।अद्वितीय जेवीएम पहचानकर्ता कैसे प्राप्त करें?

+0

वर्तमान जावा प्रक्रिया से प्रक्रिया आईडी प्राप्त करने के बारे में अधिक जानकारी के लिए http://stackoverflow.com/questions/35842/process-id-in-java देखें। [यह ब्लॉग प्रविष्टि] (http://blog.igorminar.com/2007/03/how-java- appplication-can-discover-its.html) में कुछ अच्छी जानकारी भी है। – prunge

उत्तर

9

प्रत्येक जेवीएम के लिए एक अद्वितीय आईडी बनाने का एक सरल तरीका एक स्थिर सर्वर सॉकेट शुरू करना है, जो बंदरगाह 0 का उपयोग करने के लिए सेट है, जिस पर यह किसी भी मुफ्त बंदरगाह को पकड़ लेगा। चूंकि एक ही बंदरगाह पर कोई भी दो सर्वर सॉकेट (JVM या अन्यथा) मौजूद नहीं हो सकता है, इसलिए वे सभी अद्वितीय होंगे और आप पोर्ट नंबर के लिए क्वेरी कर सकते हैं। चूंकि यह स्थिर है क्योंकि प्रति JVM केवल एक ही होगा।

यह आपके लिए कौन सी अनुमतियों पर निर्भर करता है लेकिन ज्यादातर मामलों में यह ठीक काम करता है और आप इसे हमेशा किसी भी प्रतिबंध के खिलाफ आने की संभावना कम करने के लिए "127.0.0.1" से बांध सकते हैं।

static ServerSocket myssock; 
static int myid; 

static { 
    myssock = new ServerSocket(0); 
    myid = myssock.getLocalPort(); 
} 

यदि आप अनेक मशीनों में एक साथ कई JVMs है तो आप ऊपर मशीन के लैन आईपी के साथ एक नेटवर्क भर में एक अद्वितीय JVM आईडी बनाने के लिए जोड़ सकते हैं।

2

हम प्रयोग कर रहे हैं:

import java.lang.management.ManagementFactory; 
String jvmName = ManagementFactory.getRuntimeMXBean().getName(); 

कौन सा <pid>@<hostname> की तरह कुछ, कम से कम सूर्य/Oracle JVMs में देता है।

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