मैं एक जावा प्रोग्राम पर काम कर रहा हूं जो ProcessBuilder
का उपयोग कर बैच फ़ाइल चलाता है।उप-बाल प्रक्रिया में उच्च CPU लोड
public class Test {
public static void main(String[] args){
try {
ProcessBuilder processBuilder = new ProcessBuilder("pathToMyBatch.bat");
Process process = processBuilder.start();
StreamReader fluxSortie = new StreamReader(process.getInputStream());
StreamReader fluxErreur = new StreamReader(process.getErrorStream());
new Thread(fluxSortie).start();
new Thread(fluxErreur).start();
} catch (IOException e) {
e.printStackTrace();
}
}
static class StreamReader implements Runnable {
private final InputStream inputStream;
StreamReader(InputStream inputStream) {
this.inputStream = inputStream;
}
private BufferedReader getBufferedReader(InputStream is) {
return new BufferedReader(new InputStreamReader(is));
}
@Override
public void run() {
BufferedReader br = getBufferedReader(inputStream);
String ligne = "";
try {
while ((ligne = br.readLine()) != null) {
System.out.println(ligne);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
StreamReader
वर्ग एक Runnable
कि इनपुट के लिए प्रतीक्षा करें और हर पढ़ लाइन मुद्रित है।
थिबैच फ़ाइल java -classpath...
पर कॉल करके बस एक अन्य जावा एप्लिकेशन लॉन्च करती है, और इस एप्लिकेशन से संबंधित अन्य सामग्री (और असंबंधित) करती है।
मैं इस बैच को संशोधित नहीं कर सकता।
यह स्पष्ट करने के लिए: कार्यक्रम A
बैच फ़ाइल B
जब मैं सीधे खिड़कियों से बैच फ़ाइल B
चलाने के लिए, जावा आवेदन C
मुश्किल से सीपीयू से अधिक 2% का उपयोग करें कि आवेदन C
की शुरूआत की शुरूआत। लेकिन जब मैं इसे अपने जावा प्रोग्राम A
के माध्यम से चलाता हूं, C
25% CPU लोड (1 पूर्ण कोर) का उपभोग करता है। दोनों मामलों में, सीपीयू पर बैच निष्पादन शुल्क ~ 0% है।
मुझे लगता है कि जावा एप्लिकेशन के आउटपुट और त्रुटि धाराओं के कारण यह सही ढंग से संभाला नहीं जा रहा है।
क्या मैं सही हूँ? मैं इसे कैसे ठीक कर सकता हूं? उप-बच्चे (प्रक्रिया का बच्चा) प्रक्रिया स्ट्रीम प्राप्त करने का कोई तरीका है?
आपका शीर्षक गलत है। उच्च लोड जावा एप्लिकेशन में है, न कि बच्चे की प्रक्रिया। –
यही कारण है कि मैंने 'उप-बाल प्रक्रिया' लिखा था। – jhamon
शायद आपको स्वयं को स्पष्ट रूप से समझा जाना चाहिए। वाक्यांश "उप-बाल प्रक्रिया" अर्थपूर्ण नहीं है। –