2009-05-19 22 views
35

जावा एप्लिकेशन को निष्पादित करते समय इसे दिए गए प्रक्रिया का नाम आमतौर पर java.exe या javaw.exe होता है। लेकिन मैं इसे अपने आवेदन के नाम से कैसे बुला सकता हूं?जावा एप्लिकेशन प्रक्रिया का नाम कैसे बदलें?

+0

संबंधित: [? बैश में argv0 बदलने के लिए तो आदेश ps में भिन्न नाम के साथ दिखाता है] (http://stackoverflow.com/questions/3251550/how-to-change-argv0-in-bash-so- आदेश-शो-अप-साथ-अलग नाम-इन-ps) – jfs

उत्तर

18

launch4j देखें, यह एक निष्पादन योग्य रैपर है जो आपको निष्पादन योग्य नाम असाइन करने की अनुमति देता है।

+3

सुविधा 2013 में हटा दिया गया है: संस्करण में परिवर्तन 3.1.0-beta2 (20-08-2013) कस्टम प्रक्रिया नाम सुविधा है जो नहीं था निकाला गया नए विंडोज संस्करणों के साथ संगत। –

+0

यह सच है कि launch4j अब आपको javaw.exe प्रक्रिया का नाम बदलने की अनुमति नहीं देता है। हालांकि, यदि आप stayalive = true विकल्प का उपयोग कर launch4j exe बनाते हैं, तो आपके कस्टम exe फ़ाइल के लिए प्रक्रिया का नाम javaw.exe प्रक्रिया के अतिरिक्त प्रक्रियाओं की सूची में रहेगा। इसलिए, यह उपयोगकर्ताओं को आपके कस्टम नाम के साथ प्रक्रिया को मार कर सही जावा प्रक्रिया को मारने का विकल्प देता है। – Enwired

+0

हां, विंडोज 10 में परीक्षण किया गया। जब यह सच है, ऐप का नाम और उसका लोगो टास्क मैनेजर में होगा। लेकिन समस्या यह है कि अगर मैं अपने कस्टम नाम से एप्लिकेशन को मारता हूं, तो यह एप्लिकेशन को मार नहीं देता है। – insyncim64

11

जब तक आप अपने स्वयं के कस्टम निर्मित निष्पादन योग्य में जेएनआई के माध्यम से जावा लॉन्च नहीं करते हैं, तो प्रक्रिया का नाम हमेशा java.exe होगा।

कई जावा लॉन्चर्स/रैपर हैं जो आपके लिए यह निष्पादन योग्य उत्पन्न कर सकते हैं।

+0

... भले ही आप * java.exe * का नाम बदल रहे हों? – SamB

5

जरूरत है आप सूर्य JDK, आप कर सकते हैं उपयोग कर रहे हैं सबसे हाल ही में और नवीनतम हैं

  • JSmooth
  • install4J, वाणिज्यिक होने के लिए लग रहा है बॉक्स पर चल रहे जावा प्रक्रियाओं की विस्तृत सूची प्राप्त करने के लिए "jps" कमांड लाइन टूल का भी उपयोग करें।

  • 36

    ये विधियां कई जावा प्रक्रियाओं के साथ सर्वर के लिए उपयुक्त हैं, और जहां आपको सही जेवीएम (जेपीएस का उपयोग नहीं करने) का एक त्वरित तरीका चाहिए। अनुप्रयोगों के लिए, मुझे लगता है कि launch4j या अन्य रैपर जाने का तरीका है ।

    यूनिक्स पर, आप (कम से कम पार्टी के लिए और संभवतः अन्य सभ्य गोले के लिए) एक खोल sript से लॉन्च कर रहे हैं, तो आप उपयोग कर सकते हैं:

    exec -a goodname java ... 
    

    java शुरू करने के लिए और 0 तर्क के रूप में "goodname" पारित ln -s /usr/bin/java /usr/local/bin/kallekula: है, जो ps में प्रक्रिया नाम के रूप में दिखाया जाएगा आदि

    एक शायद बेहतर विकल्प (कि top के लिए भी काम करने के लिए लगता है) एक सिमलिंक तैयार करना है।

    खिड़कियों में शॉर्टकट चाल नहीं करेंगे, लेकिन विंडोज विस्टा/7 mklink का उपयोग करके सिम्लिंक का समर्थन करता है। यह काम कर सकता है, लेकिन मैंने परीक्षण नहीं किया है। मुझे यकीन नहीं है कि exec -a विंडोज पर सिग्विन बैश के साथ भी काम करता है।

    +0

    यह सर्वर आदि लॉन्च करने के लिए अच्छा है, क्योंकि यह स्टार्ट शेल-स्क्रिप्ट में एक साधारण संपादन है। – KarlP

    +3

    एक सार्वभौमिक समाधान प्रतीत नहीं होता है। – Raphael

    +0

    नहीं, जब मैं प्रश्न पढ़ता हूं तो मैं पूरी तरह यूनिक्स सोचता था। मैंने जवाब संपादित कर लिया है। – KarlP

    3

    यह मानते हुए कि क्या आप कर रहे हैं वास्तव में के बाद बाद में सही सही प्रक्रिया समाप्त करने के लिए एक रास्ता है, तो कोई वैकल्पिक समाधान यह है:

    भागो ps -ef | grep java और आपको लगता है कि इस तरह दिखता है एक सूची मिलना चाहिए:

    mruser 7518 7505 4 11:37 pts/3 00:00:00 /usr/bin/java -classpath MRD3030_Linked.jar peralex.MyApp 
    

    फिर pkill -f peralex.MyApp सही प्रक्रिया को मार देगा।

    +1

    ध्यान दें कि केवल तभी काम करता है जब सिस्टम द्वारा/याद/कमांड लाइन को छोटा नहीं किया जाता है। लिनक्स और सोलारिस दोनों की कमांड लाइन की लंबाई पर सीमा होती है जिसे याद किया जाता है (अधिकतम स्वीकार्य से स्वतंत्र), और आप आसानी से लंबे कक्षा के साथ उस से अधिक हो जाते हैं। – ankon

    2

    निष्पादन के सभी स्वाद -ए ध्वज का समर्थन नहीं करते हैं। यदि आपका नहीं है, तो argv0 प्रोग्राम कुछ समान करता है।

    3

    यह विंडोज के लिए विशिष्ट है।
    मुझे उसी मुद्दे का सामना करना पड़ रहा था जहां मुझे टास्ककिल का उपयोग करके विशिष्ट जावा प्रोग्राम को मारना है।जब मैं जावा कार्यक्रम चलाने के लिए, कार्यसूची छवि java.exe के रूप में स्थापित नाम के साथ एक ही कार्यक्रम दिखाया जा रहा था। लेकिन यह taskkill का उपयोग कर की हत्या/एफ java.exe इरादा है जो की आवश्यकता नहीं है के अलावा अन्य सभी जावा अनुप्रयोगों बंद हो जाएगा।

    तो मैं का उपयोग कर एक ही जावा कार्यक्रम चलाने:

    शुरुआत "MyProgramName" जावा जावा-कार्यक्रम ..

    यहाँ आदेश प्रारंभ एक नई विंडो खोलने और साथ जावा कार्यक्रम चलेंगे विंडो का शीर्षक पर सेट किया गया MyProgramName

    अब kil को यह जावा-कार्यक्रम निम्नलिखित taskkill आदेश का उपयोग करें:

    taskkill/फाई "MyProgramName"

    आपका जावा प्रोग्राम केवल मौत हो जाएगी। बाकी अप्रभावित होगा।

    2

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

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

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

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

    +0

    अच्छा समाधान! लेकिन केवल लिनक्स। –

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