2012-05-23 12 views
13
Process p = Runtime.getRuntime().exec(command); 
    is = p.getInputStream(); 
    byte[] userbytes = new byte[1024]; 
    is.read(userbytes); 

मैं जावा से लिनक्स ओएस में एक शेल कमांड निष्पादित करना चाहता हूं। लेकिन पीएमडी रिपोर्ट्स का कहना है कि जावा Runtime.exec() का उपयोग न करें। क्यूं कर? क्या कारण है ? क्या Runtime.exec() के लिए कोई विकल्प है?जावा में Runtime.exec() का उपयोग क्यों करना चाहिए?

+2

पीएमडी वास्तव में क्या संदेश दिखा रहा है? – Tudor

+0

समस्या विवरण: Runtime.exec() से आदेशों को निष्पादित करें – kannanrbk

+1

निष्पादित करें यह एक बेतुका बयान है, बिल्कुल कोई समर्थन नहीं – ControlAltDel

उत्तर

33

जब तक कि आप एक प्राचीन JVM पर अटक जाते हैं, java.lang.ProcessBuilder प्रक्रिया को निर्दिष्ट करने, अपने पर्यावरण को स्थापित करने, इसे फैलाने और इसके फ़ाइल वर्णनकर्ताओं को संभालने में बहुत आसान बनाता है।

इस कक्षा का उपयोग ऑपरेटिंग सिस्टम प्रक्रियाओं के निर्माण के लिए किया जाता है।

प्रत्येक ProcessBuilder उदाहरण प्रक्रिया विशेषताओं का संग्रह प्रबंधित करता है। start() विधि उन विशेषताओं के साथ एक नया Process उदाहरण बनाता है। समान या संबंधित विशेषताओं वाले नए उपप्रोसेसेस बनाने के लिए start() विधि को उसी उदाहरण से बार-बार बुलाया जा सकता है।

...

एक नई प्रक्रिया कार्यशील निर्देशिका और वातावरण डिफ़ॉल्ट का उपयोग करता है शुरू आसान है:

Process p = new ProcessBuilder("myCommand", "myArg").start(); 

यहाँ एक उदाहरण है कि एक संशोधित कार्यशील निर्देशिका और पर्यावरण के साथ एक प्रक्रिया शुरू होता है:

ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2"); 
Map<String, String> env = pb.environment(); 
env.put("VAR1", "myValue"); 
env.remove("OTHERVAR"); 
env.put("VAR2", env.get("VAR1") + "suffix"); 
pb.directory(new File("myDir")); 
Process p = pb.start(); 
+1

धन्यवाद माइक। Processbuilder मेरे मामले में उत्कृष्ट काम किया। Runtime.exec() के साथ बहुत आसान है। Http://docs.oracle.com/javase/6/docs/api/java/lang/ProcessBuilder.html पर अधिक जानकारी और उदाहरण – tremendows

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