2012-03-14 9 views
5

विषय राज्यों के रूप में, क्या CTRL-C (और अन्य सिग्नल) को अक्षम करने का कोई तरीका है ताकि वे एप्लिकेशन को समाप्त न करें?जावा: जावा कंसोल एप्लिकेशन में Ctrl-C को अक्षम करना संभव है?

+2

[जावा वर्चुअल मशीन में हैंडल सिग्नल] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/40376/handle-signals-in-the-java-virtual-machine) –

+2

आप कुछ सिग्नल अक्षम कर सकते हैं, लेकिन सब कुछ नहीं 'kill -9';) –

+0

@ जोहान वह लेख मुझे कुछ कठिनाई बताता है। अधिक विशेष रूप से, ऐसा प्रतीत होता है कि JVM समाप्त होने से पहले सिग्नल हुक (Runtime.addShutdownHook के माध्यम से पंजीकृत) संकेतों को रोकता है। हालांकि यह वर्णन नहीं करता है कि कैसे * निष्क्रिय * सिग्नल को अक्षम करना संभव है (या कम से कम उन्हें एप्लिकेशन को समाप्त करने से रोकें)। –

उत्तर

5

EDIT2: यह भी मदद मिल सकती है: Capture SIGINT in Java

This और this आप क्या चाहते हैं दिखाई देते हैं।

Ctrl-C और अन्य कमांड आपके प्रोग्राम में "सिग्नल" भेजते हैं, और यदि आप उन सिग्नल को पकड़ने के लिए "कैच" कोड लिखते हैं, तो आप बदल सकते हैं कि आपका प्रोग्राम कैसा प्रतिक्रिया करता है। आदर्श रूप से, आप ctrl-c को प्रोग्राम को समाप्त करना चाहते हैं, क्योंकि उपयोगकर्ता की अपेक्षा है, इसलिए ध्यान रखें कि आपको उपयोगकर्ता को यह बताना चाहिए कि यदि आप प्रोग्राम की प्रतिक्रिया बदलते हैं तो यह क्यों समाप्त नहीं हो रहा है।

संपादित 3: एक कुंजीलिस्टर का बिल्ली का सुझाव आपकी अगली सबसे अच्छी शर्त है यदि आप ईवेंट को पकड़ और खारिज नहीं कर सकते हैं। Halway down the page is an example of how to do it for java in linux/Windows - it's not a portable thing. अनिवार्य रूप से, आपका प्रोग्राम कंसोल की बजाय कुंजीबार्ड घटनाओं को भेजने के बजाय कीबोर्ड ईवेंट प्रबंधित करेगा। इसका मतलब है कि कमांड लाइन को बाईपास किया गया है, और ctrl-c कॉल नहीं पढ़ सकता है। मैं कोड लिखूंगा, लेकिन अब मैं काम पर हूं; बुधवार मेरे लिए एक लंबा दिन है। यदि आप घर आने के समय तक इसे प्राप्त नहीं कर पाते हैं, तो मैं कुछ उदाहरण लिखने पर एक नज़र डालूंगा।

+0

आपकी सहायता के लिए धन्यवाद, हालांकि वे लिंक शटडाउन हुक सेट अप करने के लिए संदर्भित करते हैं, जो एप्लिकेशन को समाप्त करने से पहले JVM कॉल करता है। आवेदन अभी भी समाप्त कर दिया गया है, जो मैं रोकने की कोशिश कर रहा हूं। –

+0

आईबीएम एक को आजमाएं जिसे मैंने अभी जोड़ा है। क्षमा करें, मैं कक्षा में हूं; मैं बाहर निकलने के बाद एक नजदीकी नजर डालने में सक्षम हूं, लेकिन यह सबसे अच्छा लेख प्रतीत होता है। –

+1

संदर्भित आईबीएम लेख पृष्ठ का कहना है कि इसे प्रदर्शित नहीं किया जा सकता है - 404 :( – Mike

2

आपको CTRL-C द्वारा ट्रिगर किए गए SIGINT सिग्नल को रोकने के लिए सिग्नल हैंडलर का उपयोग करने की आवश्यकता है। सीटीआरएल-सी को ओएस स्तर पर संभाला जाएगा, यह मानते हुए कि आप वीएम को सिग्नल प्राप्त नहीं करना चाहते हैं। http://www.ibm.com/developerworks/ibm/library/i-signalhandling/?open&l=409,t=grj,p=jsh

ओरेकल लिंक - -

आईबीएम डेवलपर ऐसा करने पर एक लेख है http://www.oracle.com/technetwork/java/javase/signals-139944.html

+0

इनमें से कोई भी लिंक काम करने लगता है जो दयालु है - वे वास्तव में उपयोगी लगते हैं। मैं बस http://ringlord.com/dl/Signals-in-Java.pdf पर आया था जो हो सकता है या हो सकता है वही सामान नहीं है जिसका आप उल्लेख कर रहे थे। निजी सन एपीआई कॉल का उपयोग करता है। –

2

मुझे लगता है अगर आप एक KeyListener Ctrl + C की स्थिति को संभालने के लिए शुरू कर दिया दबाया जा रहा यह या तो नकारना चाहिए ' प्राकृतिक 'प्रतिक्रिया या एक subroutine बुलाओ जिसे आपने इसके बजाय डिजाइन किया था।

+1

धारणाएं उत्तर नहीं हैं। यह एक टिप्पणी होनी चाहिए। –

+1

धारणा भी गलत है। –

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