2010-01-25 6 views
11

वहाँ एक जावा प्रोग्राम का नाम अकेले जानने से एक खोल स्क्रिप्ट का उपयोग कर उन्हें रोकने का ksh खोल उपयोग कर रहा हूँशैल स्क्रिप्ट एक जावा कार्यक्रम को रोकने के लिए

+1

जानने क्या नाम? यदि आप निष्पादन योग्य (जो आमतौर पर 'जावा' है) का नाम जानते हैं, तो 'killall' आपका मित्र है। – sfussenegger

+0

@sfussenegger: शायद वह सभी जावा-प्रक्रियाओं को मारना नहीं चाहता, लेकिन केवल एक विशिष्ट है। – Mnementh

+0

@Mnementh मैं यही उम्मीद करता हूं, लेकिन दी गई जानकारी से यह सबसे अच्छी बात है जिसे मैं अनुशंसा कर सकता हूं। – sfussenegger

उत्तर

6

आसानी से पहचानने के लिए JVM में एक अनूठी संपत्ति जोड़ें, उदा। test.class के लिए

java -Duniquename=1 test 

यह मारने के लिए:

ps ax | grep uniquename | grep -v grep | awk '{print $1}' | xargs kill 
+0

इसकी फेंकने की त्रुटि। मैं ksh shell – Harish

+0

का उपयोग कर रहा हूं आपको क्या त्रुटि मिल रही है? –

+0

यह केएसएच के तहत ठीक काम करता है। शायद आपने कमांड कॉपी करने में त्रुटि की है। – diciu

1

आप pkill उपयोग कर सकते हैं एक रास्ता है:

pkill your_java_program_name 

यह काम करेगा यदि आप अपने प्रोग्राम का केवल एक उदाहरण चला रहे हैं।

3

आप शुरू जावा-प्रोग्राम के नाम से जुड़े प्रक्रिया-आईडी की पहचान करने वाले जेपीएस का उपयोग कर सकते हैं (जेपीएस जावा प्रोग्राम के लिए एक प्रोसेस-मैनेजर है)। इस आईडी के साथ आप सामान्य रूप से प्रक्रिया को मार सकते हैं।

+0

के रूप में चलाने के लिए है, मेरा जावा फ़ाइल नाम test.java है और इसे कैसे ढूंढ रहा है यह चल रहा है? – Harish

+0

मुझे जेपीएस में पेश करने के लिए +1 :) – sfussenegger

+0

@ हरिश: इसे संकलित करने और इसे निष्पादित करने के बाद इसे 'परीक्षण' के रूप में दिखाया जाएगा। यदि आप इसे निष्पादन योग्य जार (test.jar) में पैकेज करते हैं और 'जावा -jar test.jar' के माध्यम से निष्पादित करते हैं तो jps 'test.jar' दिखाता है। – Mnementh

20

Mnementh' suggestion पर निम्नलिखित: सूची जावा:

इस

jps -l | grep org.example.MyMain | cut -d ' ' -f 1 | xargs -rn1 kill 
  • jps -l काम करना चाहिए समर्थक सेस "एप्लिकेशन के मुख्य वर्ग के लिए पूर्ण पैकेज नाम या एप्लिकेशन की जेएआर फ़ाइल में पूर्ण पथ नाम" के साथ।

  • grep: प्रक्रिया आप

  • cut -d -' ' -f 1 चाहते चुनें: विभाजित सीमांकक '' और प्रिंट केवल पहले एक (पीआईडी)

  • xargs -rn1 kill का उपयोग कर स्तंभों में उत्पादन: प्रत्येक पीआईडी ​​के लिए मारने पर अमल (यदि कोई हो)

ध्यान दें कि आप JPS और एक ही उपयोगकर्ता (या रूट) के साथ xargs चलाना चाहिए आप इस प्रक्रिया

0 चला रहे हैं के रूप में
+1

+1 प्रत्येक 'वाह' के लिए।:) – Nishant

+1

यह विंडोज मशीनों के लिए भी काम करेगा, लेकिन आपको इसका उपयोग करने के लिए 'मारने' का पता लगाने के लिए कुछ पर्यावरण पहचान करने की आवश्यकता होगी। –

+0

@Odelya मैंने इस त्रुटि से बचने के लिए अभी ''r' ('--no-run-if-empty') को' xargs' में जोड़ा है। – sfussenegger

1

आप अपने उत्पादन को स्वरूपित करने ps का -ओ विकल्प का उपयोग कर सकते हैं,

ps -eo cmd,pid | awk '!/awk/&&/mycommand/{cmd="kill -9 "$2;system(cmd)}'