2010-09-12 12 views
5

मेरे पास एक बाहरी विंडोज़ है .exe जो वास्तव में जावा एप्लिकेशन है: .exe चलाना javaw.exe शुरू करता है, जो बदले में उस जावा एप्लिकेशन को चलाता है।विंडोज़ में जावा प्रक्रिया को कैसे मारें, javaw.exe को मारने के बिना?

मैंने उस एप्लिकेशन को नहीं लिखा और एपीआई के माध्यम से इसका कोई उपयोग नहीं किया। हालांकि, मुझे इसे मारने में सक्षम होना चाहिए। तो अभी मैं सिर्फ विंडोज़ प्रक्रिया javaw.exe को मारता हूं, जो केवल जावा एप्लिकेशन चलाने वाली टेस्ट मशीन के लिए ठीक है, लेकिन अगर मुझे बेहतर ग्रैन्युलरिटी की आवश्यकता है, तो मैं वर्तमान में ऐसा नहीं कर सकता।

मेरी खोजों ने Sysinternal's Process Explorer या जेडीके में जेपीएस कमांड जैसे सुझाव दिए, लेकिन उन लक्ष्य प्रणालियों में जिनके लिए मैं स्क्रिप्ट प्रदान करना चाहता हूं, न तो जेडीके और न ही Sysinternal प्रक्रिया प्रोप्लोरर चल रहा है।

क्या कोई अन्य तरीका है जिसके लिए बाहरी उपकरण की आवश्यकता नहीं है? क्या javaw.exe में स्विच या कमांड लाइन विकल्प है जो जावा प्रक्रियाओं को सूचीबद्ध करता है? क्या जेपीएस का जेआरई संस्करण है?

धन्यवाद।

उत्तर

3

मैं अभी भी javaw.exe को मारने का सुझाव दूंगा।

मुझे नकारात्मकता दिखाई नहीं दे रही है, क्योंकि यह वह प्रक्रिया है जिसे आप सभी के बाद मारना चाहते हैं।

याद रखें कि यदि आप मशीन पर एकाधिक एप्लिकेशन चलाते हैं, तो उनमें प्रत्येक के पास एक अलग JVM उदाहरण होना चाहिए। इसलिए यदि आपको आवश्यकता हो तो भी आप विशिष्ट एप्लिकेशन को मार सकते हैं।

+0

आप दोनों को इस मुद्दे को समझाने के लिए जिम और @ मिकरा - +1 दोनों का धन्यवाद। मुझे कैसे पता चलेगा * कौन सा * javaw.exe को मारने के लिए? –

+1

क्या आप कार्य प्रबंधक के अनुप्रयोग टैब में नहीं देख सकते हैं, फिर प्रासंगिक प्रोग्राम पर राइट-क्लिक करें और प्रक्रिया पर जाएं दबाएं। यह आपको सही javaw.exe देगा। –

+3

आपको जो चाहिए वह Sysinternals Process Explorer जैसे टूल है। यह आपको मूल प्रक्रियाओं को देखने और आपको javaw.exe को पास की गई पूर्ण कमांड लाइन दिखाने की अनुमति देगा। –

2

यदि आप एक संपूर्ण JVM को मारना चाहते हैं, तो javaw.exe प्रक्रिया को मार दें। एक JVM के भीतर कई जावा धागे हो सकते हैं लेकिन JVM में पोक करने और थ्रेड को समाप्त करने का कोई तरीका नहीं है जब तक कि एप्लिकेशन के डेवलपर ने ऐसा करने की विधि प्रदान न की हो।

1

आपकी टिप्पणी के आधार पर, एकाधिक javaw.exe प्रोग्राम चल रहे हैं और आपको यह जानने की आवश्यकता है कि कौन से को मारना है।

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

3

जेडीके (और संभवतः जेआरई) एक उपयोगिता के साथ जहाज को जेपीएस कहा जाता है जो सभी जावा प्रक्रियाओं को सूचीबद्ध कर सकता है लेकिन वर्तमान में उस जेवीएम में चल रहे मुख्य-वर्ग को भी बताता है। यदि जेएमएक्स/जेकोनसोल एक विकल्प नहीं है, तो बस "jps -ml" के आउटपुट को पार्स करना और उपयुक्त प्रक्रिया को मारना काम कर सकता है।

0

यदि निष्पादन योग्य जाव लॉन्च करता है तो कोई और जानकारी प्रदान किए बिना बाहर निकलता है ऐसा लगता है कि निष्पादन योग्य लॉन्च करने से पहले और निष्पादन योग्य समाप्त होने से पहले मशीन पर चल रही प्रक्रियाओं का स्नैपशॉट लेने के लिए आपको अपनी स्क्रिप्टिंग भाषा का उपयोग करने की आवश्यकता है। फिर आप नई जवा प्रक्रिया को कम करने में सक्षम होंगे। आप किस स्क्रिप्टिंग भाषा का उपयोग कर रहे हैं?

0

बस एक और दृष्टिकोण: यदि आपके पास jdk है, तो बिन फ़ोल्डर में jvisualVM नामक एक प्रोग्राम है। इसमें प्रत्येक चल रहे JVM संदर्भ के बारे में अच्छी जानकारी है। चीजों में से एक जो आप देख सकते हैं वह वीएम का पीआईडी ​​है, जिसका उपयोग मैं विंडोज मैनेजर में टास्क मैनेजर का उपयोग कर प्रक्रिया को मारने के लिए करता हूं (विंडोज़ पीआईडी ​​पर डिफ़ॉल्ट रूप से नहीं दिखाया जाता है, लेकिन आप आसानी से कॉलम को सक्षम कर सकते हैं -> शो कॉलम)