जावा कक्षा लाइब्रेरी java.lang.Process
वर्ग का उपयोग कर बाहरी प्रक्रियाओं का प्रतिनिधित्व करता है।
Process process = new ProcessBuilder("processname").start();
या पुराने java.lang.Runtime
वर्ग पर अतिभारित exec
तरीकों से अवगत कराया इंटरफ़ेस:: प्रक्रियाओं एक java.lang.ProcessBuilder
का उपयोग कर उत्पन्न किया जा सकता
Process process = Runtime.getRuntime().exec("processname");
इन दोनों के टुकड़े कोड एक नई प्रक्रिया, अंडे होगा जो आम तौर पर असीमित रूप से निष्पादित करता है और परिणामी Process
ऑब्जेक्ट के माध्यम से बातचीत की जा सकती है। यदि आपको यह जांचने की आवश्यकता है कि प्रक्रिया समाप्त हो गई है (या इसे समाप्त करने के लिए प्रतीक्षा करें), यह जांचना न भूलें कि process.exitValue()
या process.waitFor()
द्वारा लौटाया जाने वाला निकास मान (निकास कोड) अपेक्षित है (अधिकांश कार्यक्रमों के लिए 0), क्योंकि नहीं अगर प्रक्रिया असामान्य रूप से निकलती है तो अपवाद फेंक दिया जाता है।
भी ध्यान रखें कि अतिरिक्त कोड अक्सर आवश्यक सही ढंग से प्रक्रिया की आई/ओ को संभालने के लिए, documentation for the Process
class में वर्णित के रूप (जोर जोड़ा) है:
डिफ़ॉल्ट रूप से, बनाया उपप्रक्रिया अपने स्वयं के टर्मिनल नहीं है या कंसोल। इसके सभी मानक I/O (यानी stdin, stdout, stderr) संचालन को मूल प्रक्रिया में रीडायरेक्ट किया जाएगा, जहां उन्हें आउटपुट आउटपुटस्ट्रीम(), getInputStream(), getErrorStream(), और getErrorStream() प्राप्त करने वाली विधियों का उपयोग करके प्राप्त किया जा सकता है। अभिभावक प्रक्रिया इनपुट को फ़ीड करने और उपप्रोसेसर से आउटपुट प्राप्त करने के लिए इन धाराओं का उपयोग करती है। चूंकि कुछ देशी प्लेटफ़ॉर्म केवल मानक इनपुट और आउटपुट स्ट्रीम के लिए सीमित बफर आकार प्रदान करते हैं, तत्काल इनपुट स्ट्रीम लिखने में विफलता या उपप्रोसेस की आउटपुट स्ट्रीम को पढ़ने में उपप्रोसेस को अवरुद्ध कर सकता है, या यहां तक कि डेडलॉक भी हो सकता है।सुनिश्चित करें कि मैं/हे सही ढंग से नियंत्रित किया जाता है और जो बाहर निकलने मूल्य इंगित करता है सफलता jproc
की तरह एक पुस्तकालय है कि stdout और stderr पर कब्जा करने की जटिलताओं के साथ संबंधित उपयोग करने के लिए है, और के लिए एक सरल तुल्यकालिक इंटरफ़ेस प्रदान करता है बनाने के लिए
एक ही रास्ता बाहरी प्रक्रियाओं चलाएँ:
ProcResult result = new ProcBuilder("processname").run();
jproc
Maven केंद्रीय माध्यम से उपलब्ध है:
<dependency>
<groupId>org.buildobjects</groupId>
<artifactId>jproc</artifactId>
<version>2.2.0</version>
</dependency>
स्रोत
2016-08-18 14:42:32
ध्यान दें कि आपको विधि के '.exec (स्ट्रिंग [])' फ़ॉर्म का उपयोग करना चाहिए , एकल स्ट्रिंग '.exec (स्ट्रिंग)' फ़ॉर्म नहीं है जो * कमांड लाइन प्रोसेसर नहीं है * - यह बस रिक्त स्थान पर विभाजित होता है। वे इस उदाहरण के लिए 'tree.com/ए'' के लिए एक ही परिणाम देते हैं, लेकिन यदि दिए गए हैं तो अलग हैं, उदाहरण के लिए, एक फ़ाइल नाम जिसमें रिक्त स्थान हैं। –
आपको त्रुटि स्ट्रीम भी फ्लश करना चाहिए और यदि आवश्यक हो तो प्रक्रिया आउटपुट मान की प्रतीक्षा करें। –