2010-06-10 16 views
7

मेरा मुख्य क्षेत्र नेट है लेकिन हाल ही में मुझे जावा के साथ कुछ करने के लिए मिला है। मुझे जावा में एक खोल उपयोगिता बनाना है जो निर्दिष्ट अवधि के बाद कुछ डेटाबेस रिकॉर्ड पढ़ने के लिए पृष्ठभूमि में चला सकता है और आगे की प्रक्रिया कर सकता है। यह एक प्रकार का शेड्यूलर है। अब मुझे कुछ चिंताएं हैं:कमांड लाइन से जावा प्रोग्राम के निष्पादन को कैसे रोकें?

यह सेवा एक सेवा के रूप में कैसे करें। मैं इसे खोल स्क्रिप्ट के माध्यम से निष्पादित करना चाहता हूं और उपयोगिता को चलना शुरू करना चाहिए। बेशक नियंत्रण को कॉलिंग स्क्रिप्ट पर वापस जाना चाहिए।

दूसरा, अंततः मैं इस प्रक्रिया को चलने से रोकना चाहता हूं। इसे कैसे प्राप्त करें?

मुझे समझ में आता है कि ये मूल प्रश्न हैं लेकिन मुझे नहीं पता कि कहां से शुरू करना है और मेरे लिए कौन से विकल्प सबसे अच्छे हैं।

कोई मदद/सलाह कृपया?

+0

@ डैनबेन निश्चित, करेंगे ... धन्यवाद – Aakash

उत्तर

2

मैं शेड्यूलर या सेवा का उपयोग कर प्रोग्राम चलाने के लिए जाऊंगा। हालांकि, अगर आप एक बल्ला फ़ाइल का उपयोग करते हैं और इस प्रोग्राम के रूप में कार्य करना चाहते हैं, मैं एक संभव दृष्टिकोण नीचे उल्लिखित है:

अपने जावा प्रोग्राम में, आप पीआईडी ​​प्रोग्राम के रूप में प्राप्त कर सकते हैं, और फिर इसे एक फ़ाइल पर लिखने:

public static void writePID(String fileLocation) throws IOException 
{ 
    // Use the engine management bean in java to find out the pid 
    // and to write to a file 
    if (fileLocation.length() == 0) 
    { 
     fileLocation = DEFAULT_PID_FILE; 
    }  
    String pid = ManagementFactory.getRuntimeMXBean().getName(); 
    if (pid.indexOf("@") != -1) 
    { 
     pid = pid.substring(0, pid.indexOf("@")); 
    }            
    BufferedWriter writer = new BufferedWriter(new FileWriter(fileLocation)); 
    writer.write(pid); 
    writer.newLine(); 
    writer.flush(); 
    writer.close();      
} 

फिर आप एक स्टॉप .bat फ़ाइल लिख सकते हैं जो विंडोज़ में चल रहे प्रोग्राम को मार देगा। आप कुछ ऐसा कर सकते हैं:

setlocal 
IF EXIST app.pid FOR /F %%i in ('type app.pid') do TASKKILL /F /PID %%i 
IF EXIST app.pid DEL app.pid 
endlocal 

बेशक, app.pid ऊपर जावा विधि द्वारा लिखी गई फ़ाइल है।

मुझे यकीन नहीं है कि आप एक जावा प्रोग्राम लॉन्च करने वाली स्क्रिप्ट लिखने में सक्षम होंगे, और समाप्ति पर नियंत्रण को वापस कर देगा। मुझे यह देखने में दिलचस्पी होगी कि किसी के पास इसका समाधान है या नहीं।

+0

क्या इसका मतलब है कि मुझे एक और जावा एप्लिकेशन लिखना पड़ सकता है जो उस फ़ाइल को पढ़ेगा और चल रही प्रक्रिया को मार देगा? – Aakash

+0

नहीं, .bat फ़ाइल थोड़ी सी है जो आपकी प्रक्रिया को मार रही है। यह वीबीस्क्रिप्ट का एक छोटा सा है जो चल रहे ऐप को मार रहा है। यदि EXIST app.pid के लिए/f %% i ('app appid' टाइप करें) में TASKKILL/F/PID %% i यदि आप इसे * निक्स पर चला रहे हैं, तो आप एक शेल स्क्रिप्ट लिख सकते हैं जो करता है वही चीज़। – Luhar

1
ps ux 

pid

kill pid 

देखने या आप बेहतर एक रोक स्क्रिप्ट है कि आवेदन है, जो System.exit(0)

+0

जब तक वह डेटाबेस लेनदेन की तरह कुछ नहीं कर रहा है, तो पिड को मारना ठीक है। यदि उसके पास डेटाबेस लेन-देन है, तो इसे थोड़ा और अधिक करने की आवश्यकता हो सकती है। – bwawok

+0

@bwawok आप सही हैं। मैं डेटाबेस काम कर रहा हूँ। – Aakash

1

आप मंच निर्दिष्ट नहीं किया करता है का संकेत उपलब्ध कराएंगे। यदि विंडोज़ पर आपको विंडोज़ सेवा बनाने के लिए सर्विस कंट्रोल के साथ एकीकृत करना चाहिए। http://en.wikipedia.org/wiki/Windows_service। एक बार जब आप सेवा हुक लागू कर लेते हैं, तो सेवा नियंत्रण जीयूआई के माध्यम से सेवा शुरू करना और रोकना संभव है या कमांड लाइन से net stop MyService सिंटैक्स का उपयोग करना संभव है।

+0

मैं इसे यूनिक्स प्लेटफॉर्म पर करना चाहता हूं। धन्यवाद – Aakash

2

मुझे लगता है कि आप अपने जावा प्रोग्राम को लिनक्स/यूनिक्स बॉक्स के साथ खेल रहे हैं। एक डेमॉन के रूप में अपने आवेदन चलाने के लिए, तुम कोशिश कर सकते

nohup java YourJavaClass & 

आपके आवेदन रोकने के लिए, आप या तो:

kill [psIdofYourApplication] 

या

fg [your application job Id] 
Ctrl-C 

आप कुछ postprocessing करना चाहते हैं तो आवेदन 'हत्या/रोक' संकेत प्राप्त करने के बाद।बाहर की जाँच addShutdownHook(Thread hook)

या sun.misc.SignalHandler

0

मैं समझता हूँ के रूप में, आप कुछ इस तरह हैं:

if (System.in.avaliable() > 0) { 
    in = new BufferedReader(new InputStreamReader(System.in); 
    String InLine = in.readLine(); 
    ... 
} 

I Am है ना?

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