2012-08-01 12 views
16

मैं एक जावा अनुप्रयोग है कि आदेश समाप्ति पर कार्यक्रम का/रुकावट को साफ करने में बंद हुक का इस्तेमाल करता है पर काम कर रहा हूँ शुरू नहीं, लेकिन मैंने देखा है कि सीटीआरएल-सी का सिग्विन का कार्यान्वयन शट डाउन हुक को ट्रिगर नहीं करता है। सतह पर ऐसा लगता है कि प्रक्रिया को बाधित कर दिया गया है, कमांड लाइन पर वापस नियंत्रण छोड़ रहा है, हालांकि प्रक्रिया 'शट डाउन हुक सभी इतनी सफाई नहीं हुई है कि ऐसा नहीं होता है।Cygwin CTRL-C (सिग्नल अवरोध) ठीक से काम नहीं - JVM शटडाउन हुक्स

cmd में वे पकड़े, लेकिन विभिन्न बाधाओं के कारण मैं किसी भी तरह Cygwin में काम कर उन्हें प्राप्त करने की जरूरत है।

क्या सिगविन के माध्यम से एक चल रही प्रक्रिया में सिगिनट को आग लगाने का कोई तरीका है, या शायद शटडाउन हुक का विकल्प जो मैं व्यवधान और समाप्ति पर साफ करने के लिए उपयोग कर सकता हूं?

+0

अजीब, मैं अजगर में SIGINT पर कब्जा कर सकते हैं, cygwin में, इस मुद्दे के बिना। अन्य विचारों के लिए http://stackoverflow.com/questions/1028687/best-way-to-gracefully-shutdown-a-java-command-line-program की जाँच करें। – AlG

+0

यह अजीब बात है, मेरे प्रयासों ने प्रक्रिया को बंद कर दिया है, लेकिन यदि एक सिगिनट सेट किया जा रहा है, तो मेरे जावा एप्लिकेशन के शट डाउन हुक निश्चित रूप से इसे पकड़ नहीं रहे हैं - प्रोग्राम निकलता है लेकिन साफ ​​अप निष्पादित नहीं होता है। हालांकि, धन्यवाद, मैं उस धागे के माध्यम से एक नज़र रखना होगा। – Quetzalcoatl

+0

इस मुद्दे की एक चर्चा: http://cygwin.1069669.n5.nabble.com/CTRL-C-is-not-working-with-java-on-latest-cygwin-1-7-15-td63179.html –

उत्तर

0

This thread शायद कुछ प्रकाश डाला। कुछ विकल्प

timeout 1d <command> 

या

Ctrl-C patch हावर्ड चू

12

बैश से आह्वान गैर cygwin (विंडोज़) एक मध्यवर्ती बैश प्रक्रिया के माध्यम से निष्पादन-योग्य (bash खोल -> बैश -> जावा)। जब आप Ctrl-C टाइप करते हैं, तो बैश प्रक्रिया को SIGINT मिल जाता है और बच्चे जावा प्रक्रिया को मारता है, इसलिए शट डाउन हुक नहीं आते हैं। विंडोज प्रक्रियाओं को सिगिनट, सिगरेट या सिगकिल जैसे संकेतों से अवगत नहीं हैं।

जैसा कि -Xrs विकल्प प्रलेखन में वर्णित है, जावा प्रक्रिया CTRL_C_EVENT विंडोज ईवेंट के लिए एक कंसोल नियंत्रण हैंडलर पंजीकृत करती है और जो शटडाउन हुक को आमंत्रित करने वाली एक सुंदर समाप्ति को ट्रिगर करती है। उम्मीद के अनुसार काम करने के लिए Ctrl-C प्राप्त करने के लिए, आपको यह सुनिश्चित करना होगा कि जावा प्रक्रिया इसे प्राप्त करे, लेकिन अभी यह बैश द्वारा अवरुद्ध है और बच्चे की प्रक्रिया में आगे नहीं बढ़ी है। मैं कैसे है Cygwin खिड़कियों सांत्वना प्रक्रियाओं के लिए आगे पारित कर सकते हैं Ctrl-C:

यह समस्या के रूप में फिर से बताने से किया जा सकता है?

नोट: ऊपर वर्णित बैश व्यवहार संस्करण 1.7.25 पर सत्यापित किया गया था।

+0

नीचे की रेखा, इसकी एक साइगविन समस्या, जावा समस्या नहीं है। – HDave

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