Spawn a multi-threaded Java program from a Windows command line program, spawner won't end until spawnee ends. How can I prevent the hang? -


संक्षिप्त संस्करण:

मैं Windows में एक स्पैन्ड जावा प्रक्रिया को रोकने से कैसे रोक सकता / सकती हूं? लम्बी संस्करण:

मैं एक बहु-थ्रेडेड जावा प्रोग्राम (सेलेनियम आर सी, यह बात नहीं करना चाहिए) से अंडे की कोशिश कर रहा हूँ प्रोग्राम को विंडोज कमांड लाइन से शुरू किया गया है (एनएएनटी & lt; exec & gt; कार्य, फिर से, ऐसा नहीं होना चाहिए) मैं इसे विंडोज "स्टार्ट" कमांड का उपयोग कर रहा हूं, और पैदा की गई प्रक्रिया शुरू हो गई है और ठीक से चल रही है। स्पॉन्गिंग प्रक्रिया को नियंत्रण वापस और खत्म हो जाता है (नैंट कहते हैं, "सफल बनाया गया"), लेकिन वास्तव में कमांड लाइन से बाहर नहीं निकलता जब पैदा की गई प्रक्रिया आखिरकार समाप्त हो जाती है (घंटे बाद हो सकती है), कमांड प्रोसेस रिटर्न और कमांड लाइन प्रॉम्प्ट होता है।

उदाहरण के लिए:

  & lt; target name = " start_rc "& gt; & Lt; exec प्रोग्राम = "cmd" failonerror = "false" workdir = "$ {ross.p5.dir} \ उपकरण \ सेलेनियम \ सेलेनियम-सर्वर-1.0.1" वर्बोज़ = "सच" & gt; & Lt; arg मान = "/ सी" / & gt; & Lt; arg मान = "प्रारंभ" / & gt; & Lt; arg मान = "java" / & gt; & Lt; arg मान = "- जार" / & gt; & Lt; arg पथ = "$ {ross.p5.dir} \ उपकरण \ सेलेनियम \ सेलेनियम-सर्वर-1.0.1 \ selenium-server.jar" / & gt; & Lt; arg मान = "- उपयोगकर्ता एक्सटेंशन" / & gt; & Lt; arg पथ = "$ {ross.p5.dir} \ उपकरण \ सेलेनियम \ selenium-server-1.0.1 \ user-extensions.js" / & gt; & Lt; arg मान = "- ब्राउज़र साइडलाग" / & gt; & Lt; arg मान = "- लॉग" / & gt; & Lt; arg मान = "$ {ross.p5.dir} \ कलाकृतियों \ selenium.log" / & gt; & Lt; arg मान = "- डीबग" / & gt; & Lt; / कार्यकारी & gt; & Lt; / लक्ष्य & gt;  

उत्पादन:

  सी: \ रॉस & gt; नैनंट start_rc NAnt 0.86 (बिल्ड 0.86.2898.0; बीटा 1; 12/8/2007) कॉपीराइट (सी) 2001-2007 गेरी शॉ http://nant.sourceforge.net Buildfile: फ़ाइल: /// सी: / रॉस / पार। बिल्ड लक्ष्य फ़्रेमवर्क: माइक्रोसॉफ्ट। नेट फ्रेमवर्क 3.5 लक्ष्य (एस) निर्दिष्ट: start_rc start_rc: [exec] प्रारंभ करना 'सीएमडी (सी / सी शुरू जावा वर्जर सी: \ पी 5 \ उपकरण \ सेलेनियम \ सेलेनियम-सर्वर-1.0.1 \ सेलेनियम-सर्वर। जेनर-एक्स्टेंशन सी: \ पी 5 \ उपकरण \ सेलेनियम \ सेलेनियम-सर्वर 1.0.1 \ उपयोगकर्ता- extensions.js -browserSideLog -log C: \ p5 \ artifacts \ selenium.log -debug) में 'C: \ p5 \ Tools \ सेलेनियम \ selenium-server-1.0.1' निर्मित SUCCEDEDED कुल समय: 4.1 सेकंड  

... और तब तक कुछ भी नहीं जब तक मैं खिड़की बंद नहीं करता जहां जावा चल रहा है, तब ...

  सी: \ रॉस & gt;  

जाहिर है, कुछ नंट प्रक्रिया को समाप्त करने से रोक रही है, लेकिन क्या विंडोज़ स्टार्ट कमांड इसे रोक नहीं सकता है?

आपको अपने exec कार्य में एक समस्या है कि spawn के लिए डिफ़ॉल्ट है असत्य। से:

यह दिखाता है कि क्या एप्लिकेशन को पैदा किया जाना चाहिए या नहीं मान सेट करता है। यदि आप एक आवेदन पैदा करते हैं, तो इसका आउटपुट NAnt द्वारा लॉग नहीं होगा। डिफ़ॉल्ट झूठी है

(याद रखें, नं "चींटी नहीं है," लेकिन अभी भी ...), exec कार्य के स्पॉन पैरामीटर के उपयोग का एक ठोस उदाहरण है:

  & lt; संपत्ति नाम = "ब्राउज़र" स्थान = "सी: / प्रोग्राम फ़ाइलें / इंटरनेट एक्सप्लोरर / यानी एक्सप्लोर.एक्सए" / & gt; & Lt; संपत्ति नाम = "फ़ाइल" स्थान = "एंट / डॉक्स / मैन्युअल / इंडेक्स.html" / & gt; & Lt; exec निष्पादन योग्य = "$ {ब्राउज़र}" spawn = "true" & gt; & Lt; arg मान = "$ {file}" / & gt; & Lt; / कार्यकारी & gt;  

जब वह ब्राउज़र कार्य आग लग जाता है, तो इंटरनेट एक्सप्लोरर उस पेज पर खुल जाएगा, लेकिन आउटपुट या कार्य पूर्ण होने की प्रतीक्षा किए बिना निर्माण जारी रहेगा।


Comments