2009-06-29 9 views
49

यदि कोई जावा प्रोग्राम प्रारंभ होता है, तो यह सिस्टम प्रक्रिया में मिलता है-नाम जावा की निगरानी करता है। कई जावा-प्रोग्राम इस तरह से अंतर करने के लिए कठिन हैं। इसलिए नाम सेट करने के लिए, यदि कोई तरीका मौजूद है, तो यह अच्छा होगा, जो प्रक्रिया-मॉनीटर में दिखाया जाएगा। मुझे पता है कि यह विभिन्न ऑपरेटिंग सिस्टम पर अलग काम कर सकता है।मैं जावा-प्रोग्राम के लिए प्रक्रिया नाम कैसे सेट कर सकता हूं?

एक आसान तरीका हो सकता है, अगर जावा-दुभाषिया एक स्विच का समर्थन इस तरह नाम सेट करने, होगा:

java -processname MyProgram -jar MyProgram 

लेकिन मैं इस तरह के एक स्विच नहीं पा सके, तो यह शायद गैर है विद्यमान। प्रक्रिया-नाम सेट करने के लिए जावा में एक एपीआई भी ठीक होगा।

तो, तो आपके पास कोई सुझाव है?

उत्तर

40

मुझे नहीं पता कि यह संभव है, लेकिन आप एक कमांड लाइन उपकरण का उपयोग कर सकते हैं जो 'जेपीएस' नामक जेडीके के साथ आता है। यह * nix ps जैसा है, लेकिन इसके बजाय केवल जावा प्रोग्राम। jps -v जावा में आपके द्वारा पारित किए गए सभी तर्क दिखाता है।

इसके अलावा, मैंने लोगों को तर्कों के लिए एक अप्रयुक्त -Dmyprocessname जोड़कर अपनी जावा प्रक्रियाओं में "प्रक्रिया नाम" संलग्न किया है।

+0

से अधिक नहीं वास्तव में मैंने पूछा के लिए जवाब है, लेकिन वास्तव में मेरी समस्या के लिए सही जवाब। धन्यवाद। :-) – Mnementh

+0

सेटप्रोक्टाइटल की कमी के लिए यह एक चालाक समाधान है। कुडोस। – synthesizerpatel

+1

मैं भी इसी तरह के विकल्पों की तलाश में हूं। लेकिन यह जवाब मुझे स्पष्ट नहीं है। क्या कोई मुझे बता सकता है कि प्रक्रिया का नाम कैसे सेट करें। मैंने देखा कि '-D = value' नामक एक विकल्प है। क्या हमें इस विकल्प का उपयोग करने की ज़रूरत है? धन्यवाद। -0 विचार के लिए – Naresh

1

ऐसा इसलिए है क्योंकि जावा एप्लिकेशन वास्तव में निष्पादन योग्य नहीं हैं, वे जावा वर्चुअल मशीन द्वारा चलाए जाते हैं, यही कारण है कि जावा प्रक्रिया प्रक्रिया में प्रकट होता है, यह आपके एप्लिकेशन का मेजबान है।

हालात LimeWire की तरह तथापि लेकिन मुझे लगता है कि GCJ करने के लिए नीचे और भी है है - आप JSmooth की तरह कुछ का उपयोग कर अपने जावा आवेदन शुरू करने के एक अलग प्रक्रिया के नाम का उपयोग करने के लिए आप अपने खुद के द्विआधारी बनाना होगा चाहते हैं http://gcc.gnu.org/java/

5

जब मैंने इसे पहली बार पढ़ा, तो प्रक्रिया नाम बदलने का विचार मुझे असंभव बना दिया। हालांकि, this ancient thread on the sun forum के अनुसार आप इसे प्राप्त करने के लिए JVM निष्पादन योग्य के आसपास सी ++ रैपर का उपयोग कर सकते हैं।

हालांकि स्पष्ट रूप से, मुझे आश्चर्य है कि आपकी असली समस्या क्या है, क्योंकि मुझे लगता है कि प्रक्रिया का नाम बदलने का प्रयास करने के बाद एक और मानक समाधान है।

+3

यदि आपको अपने आवेदन को मारना पड़ा और कई जावा एप्लिकेशन चल रहे थे तो यह थोड़ा हिट और मिस होगा। – Lloyd

+1

आप सही हैं, omerkudat द्वारा वर्णित jps-command प्रक्रियाओं का नाम बदलने के बिना समस्या को हल करता है। – Mnementh

+2

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

16

रूप @omerkudat कहा नहीं है:

jps -v 

सभी जावा प्रक्रियाओं को प्रिंट करता है {processID, params list} यदि पैराम्स सूची आपको आवश्यक अनुप्रयोगों को पहचानने के लिए पर्याप्त नहीं है, कोशिश कुछ डमी पैरामीटर जोड़ने जब उन्हें चलने:

7780 MainFrame -Dname=myApp 

और तुम्हें मार/यह नजर रखने के लिए प्रक्रिया आईडी का उपयोग कर सकते हैं:

java -Dname=myApp -cp myApp.jar some.client.main.MainFrame 

इस तरह प्रिंट होगा।

10

आप एक LD_PRELOAD शिम के साथ ऐसा कर सकते हैं: https://github.com/airlift/procname

शिम बस जब प्रक्रिया शुरू लिनक्स विशिष्ट prctl() कॉल:

static void __attribute__ ((constructor)) procname_init() 
{ 
    prctl(PR_SET_NAME, "myname"); 
} 

कॉल मुख्य थ्रेड पर होना होता है तो, जावा या यहां तक ​​कि JVMTI एजेंट के साथ ऐसा करना संभव नहीं है, क्योंकि वे एक अलग थ्रेड पर होते हैं।

+1

यह वास्तव में अच्छी तरह से काम करता है और –

+0

की तुलना में यह एक आसान दृष्टिकोण है, यदि कोड एमआईटी, अपाचे या किसी अन्य ऐसे लाइसेंस समझौते के तहत लाइसेंस प्राप्त किया गया था तो मैं इस कोड का उपयोग करने पर विचार करूंगा। –

+4

यह कोड इतना छोटा है (यह केवल एक फ़ंक्शन को कॉल करता है) कि यह कॉपीराइट योग्य भी प्रतीत नहीं होता है। कृपया इसे सार्वजनिक डोमेन पर विचार करें। यदि आप चाहते हैं, तो मैं एक लाइसेंस फ़ाइल जोड़ सकता हूं। –

1

मुख्य रूप से 2 दृष्टिकोण हैं: एक जैसा पहले से ही वर्णित है: Launch4j, WinRun4J जैसे मूल विंडोज लॉन्चर बनाने के लिए उपकरण का उपयोग करना।

एक और दृष्टिकोण जो बेहतर लगता है, जावा एप्लिकेशन को विंडोज़ सेवा के रूप में लपेटने के लिए अपाचे प्रोक्रुन का उपयोग करना है। स्थापित सेवा प्रक्रिया के दौरान, हम प्रक्रिया को एक सार्थक नाम जैसे OurApp.exe दे सकते हैं।

हमें बस हमारी आवश्यकता है prunsr.exe का नाम OurApp.exe पर बदलें और हमारे इंस्टॉल में prunsrv.exe की हर घटना को प्रतिस्थापित करें | start | stop | MyApp.exe पर सेवा स्क्रिप्ट अनइंस्टॉल करें।

देखें Using Apache Procrun to Rename Process Name of a Java Program in Windows

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

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