जावा प्रक्रियाओं को मार डालो


25

मैं एक कम्प्यूटेशनल रूप से भारी कोड पर काम कर रहा हूं - अभी के लिए - बहुत क्रैश करता है, लेकिन मैं अभी भी इस पर काम कर रहा हूं :) जब यह क्रैश हो जाता है, तो मैं GUI विंडो को बंद नहीं कर सकता; मुझे एक खोल खोलना है और मारना है -9 प्रक्रिया।

यह एक जावा प्रक्रिया है और इसे खोजना आसान है:

nkint@zefiro:~$ ps aux | grep java
nkint   2705 16.6  1.0 460928 43680 ?        Sl   12:23   0:08 /usr/lib/jvm/java-6-sun-1.6.0.26/bin/java -Djava.library.path=something something
nkint   2809  0.0  0.0   4012   776 pts/0    S+   12:24   0:00 grep --color=auto java
nkint@zefiro:~$ kill -9 2705

अब यह आसान है लेकिन काफी यांत्रिक कार्य है। इसलिए आम तौर पर मैं दुर्घटना के बारे में 7-8 प्रक्रियाओं की प्रतीक्षा करता हूं, और फिर kill -9उनमें से प्रत्येक।

मैं यह एक स्वचालित तरीके से करना चाहता हूं। मुझे लगता है कि (n-1) के परिणामों की आईडी लेने ps aux | grep javaऔर उसे मारने के लिए कुछ कमांड को पाइप करना आसान होना चाहिए, लेकिन मुझे पता नहीं है कि कहां से शुरू करना है।

क्या कोई मुझे कोई संकेत दे सकता है?

जवाबों:


22

कुछ और पाइप आपको मिलेंगे जहाँ आप होना चाहते हैं। यहाँ है कि मैं यह कैसे करूँगा:

search_terms='whatever will help find the specific process' 

kill $(ps aux | grep "$search_terms" | grep -v 'grep' | awk '{print $2}')

यहाँ क्या हो रहा है:

grep -v 'grep' परिणामों से grep प्रक्रिया को बाहर करता है।

awk '{print $2}' उत्पादन के केवल 2 कॉलम प्रिंट करता है (इस मामले में पीआईडी)

$(...)कमांड प्रतिस्थापन है। मूल रूप से आंतरिक कमांड के परिणाम को तर्क के रूप में उपयोग किया जाएगाkill

इससे मारे गए व्यक्ति पर बेहतर नियंत्रण का लाभ है। उदाहरण के लिए, यदि आप एक साझा प्रणाली पर हैं तो आप खोज शब्दों को संपादित कर सकते हैं ताकि यह केवल आपकी स्वयं की जावा प्रक्रियाओं को मारने का प्रयास करे।


49

यदि आप उन सभी प्रक्रियाओं को मारना चाहते हैं जिनका नाम है javaतो आप निम्नलिखित आदेश का उपयोग कर सकते हैं:

किल -9 जावा

यह कमांड उनके नाम से पहचानी जाने वाली प्रक्रियाओं को संकेत भेजता है।


killall javaमेरे लिए कुछ यादृच्छिक कारण से काम नहीं कर रहा था जिसे मैं हल करने में सक्षम नहीं था। -9पैरामीटर है कि का ध्यान रखा। धन्यवाद।
पॉल नेल्सन बेकर

5
9 सिगली है। कार्यक्रम इसे अनदेखा नहीं कर सकता है, और यह मूल रूप से कहता है: अब खुद को समाप्त करें।
मिलान टोडोरोविच

IntelliJ उपयोगकर्ता पा सकते हैं कि उनकी IDE, टोस्कैट और कई अन्य ऐप्स का उल्लेख नहीं करने के लिए दुर्घटनाग्रस्त हो गई है। यह एक ब्रूट-फोर्स तरीका है और किसी भी सिस्टम पर सेवाओं या उत्पादकता एप्लिकेशन पर निर्भर होने के साथ अनुशंसित नहीं है java
tresf

3

एक टेक्स्ट एडिटर खोलें और अपने होम डाइरेक्टरी में इस शॉर्ट बैश स्क्रिप्ट को 'किलजवा' के रूप में सेव करें।

#! /bin/bash

# Kill Java process

# Determine the pid
PID=`ps -C java -o pid=`

kill -9 $PID

फिर chmod u+x ~/killjavaएक टर्मिनल में ताकि आप फ़ाइल को निष्पादित कर सकें।

तब आप बस ~/killjavaएक टर्मिनल से कॉल कर सकते हैं और आपकी जावा प्रक्रिया पत्थर की मृत हो जाएगी। आप इस पर विचार करने की इच्छा कर सकते हैं कि जावा प्रक्रिया के आपके अन्य संसाधन इस तरह से (जैसे डेटाबेस कनेक्शन) प्रभावित होंगे। उदाहरण के लिए, शायद kill -15अधिक उपयुक्त होगा - यहां स्पष्टीकरण देखें ।


2

यहाँ एक वैकल्पिक दृष्टिकोण है, जो @ डीन के पहले वाले उत्तर पर आधारित है।

यह जावा प्रक्रिया की पहचान करने के लिए jps का उपयोग करता है।

kill $(jps | grep <MainClass> | awk '{print $1}')

MainClass आपके रनिंग जावा प्रोग्राम में एक वर्ग है जिसमें मुख्य विधि शामिल है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.