मैं एक कोड लिखने कि Runtime.getRuntime().exec("java -jar MyServerRunner -port MYPORT");
जावा:। Runtime.getRuntime() द्वारा runned प्रक्रिया को मारने के कार्यकारी()
- रन यूनिक्स प्रक्रिया की जरूरत है जावा से कमांड को क्रियान्वित प्रक्रिया के पीआईडी लगता है कोड
lsof -t -i: MYPORT
- और
- (भी जावा कोड से कमांड को क्रियान्वित) पीआईडी
kill -9 PID
द्वारा उसे मारने और फिर दूसरों को अंजाम आदेश
लेकिन
अगर मैं Runtime.getRuntime().exec()
द्वारा इस आदेश पर अमल मेरा कार्यक्रम बाहर निकलने के कोड 137 के साथ बाहर निकल जाता है - इसका मतलब है कि मैं मेरे जावा programm की प्रक्रिया को मारने जब मैं Runtime.getRuntime().exec("kill -9 PID")
चलाते हैं, लेकिन कार्यक्रम नहीं, कि मैं कोड से चलाते हैं।
मैं केवल उस प्रक्रिया को कैसे मार सकता हूं जो मैं कोड से चलाता हूं?
पीएस शायद मुझे Processbuilder का उपयोग करना चाहिए?
यदि आप किसी अन्य जावा प्रक्रिया को चलाने के लिए 'Runtime.getRuntime()' का उपयोग कर रहे हैं तो आप कुछ गलत कर रहे हैं। आप कक्षा को 'थ्रेड' में क्यों नहीं चला सकते? –
1. और यदि आप '-9' के साथ प्रक्रियाओं को मार रहे हैं तो आप कुछ भी गलत कर रहे हैं। अगर प्रक्रिया में एक बंदरगाह है तो उसे शट डाउन कमांड भी होना चाहिए जिसे उस बंदरगाह पर भेजा जा सकता है। 'kill -9' एक व्यवस्थापक के लिए अंतिम उपाय का एक कार्य है जो जानता है कि वह क्या कर रहा है (और इसे लॉग करता है)। इसे अनुप्रयोगों में नहीं बनाया जाना चाहिए। 2. तथ्य यह है कि शुरू की गई जावा प्रक्रिया '137' के साथ निकलती है, इस तथ्य से कोई लेना-देना नहीं है कि आप गलत प्रक्रिया को मार रहे हैं। – EJP