मैं CLI एप्लिकेशन में Ctrl + C "अवरोधन" कैसे कर सकता हूं?


85

मैं CLI (कमांड लाइन इंटरफ़ेस) जावा एप्लिकेशन में + (जो सामान्य रूप से प्रक्रिया को मार डालेगा) को कैसे रोक सकता है ?CtrlC

क्या बहु-प्लेटफ़ॉर्म समाधान मौजूद है (लिनक्स, सोलारिस, विंडोज)?

मैं उपयोग कर रहा हूँ Console's readLine(), लेकिन यदि आवश्यक हो तो, मैं किसी अन्य विधि का उपयोग कर सकते मानक इनपुट से पात्रों को पढ़ने के लिए।

जवाबों:


121
Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { /*
       my shutdown code here
    */ }
 });

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

आपको SignalHandler( + यूनिक्स के साथ-साथ विंडोज पर) ट्रिगर सिग्नल sun.misc.SignalHandlerको इंटरसेप्ट करने के लिए ( ) का उपयोग करने की आवश्यकता है । देखें इस लेख (पीडीएफ, पेज 8 और 9)।SIGINTCtrlC


5
@MartijnCourteaux पांच साल बाद होता है;) मैंने उस विषय पर एक समान स्रोत पाया है और उसी के अनुसार लिंक को बदल दिया है।
VonC

@VonC - इट्स डेड फिर
गुरविंदर सिंह

@GurV कौन सा लिंक? अप्रैल 2014 में किया गया संपादन ( stackoverflow.com/revisions/… ) अभी भी वैध है: आप अभी भी pdf फ़ाइल डाउनलोड कर सकते हैं ..
VONC

16

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


इससे पहले कभी भी शट डाउन के बारे में नहीं सुना गया। धन्यवाद!
ivan_ivanovich_ivanoff

8

किसी कारण से बंद किए बिना Ctrl+ को संभालने में सक्षम Cहोने के लिए, आपको सिग्नल हैंडलिंग के कुछ प्रकार का उपयोग करने की आवश्यकता होगी (क्योंकि Ctrl+ Cइनपुट वास्तव में सीधे आपके आवेदन में पारित नहीं होता है, लेकिन इसके बजाय ओएस द्वारा नियंत्रित किया जाता है जो उत्पन्न करता है एक संकेत जो तब जावा को दिया जाता है।

सिग्नल से निपटने के विवरण के लिए http://www.oracle.com/technetwork/java/javase/signals-139944.html देखें ।

(यदि आप केवल शालीनतापूर्वक बंद करना चाहते हैं, तो akf का उत्तर पर्याप्त होगा।)


4

SIGTERM को कैसे संभालना है इसके बारे में कुछ लिंक - यही वह संकेत है जो प्रोग्राम ओएस की तरफ से हो रहा है:

http://blog.webinf.info/2008/08/intercepting-sigterm.html

http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/signals.html

http://www.ibm.com/developerworks/java/library/i-signalhandling/

कि POSIX ऑपरेटिंग सिस्टम पर काम करना चाहिए - अर्थात, Mac और Unix को काम करना चाहिए, खिड़कियों पर मुझे यकीन नहीं है, मुझे याद है कि यह सुनना भी कुछ हद तक POSIX के अनुकूल है, लेकिन अलग-अलग संस्करणों के साथ बहुत कुछ हो सकता है।


1
दूसरी कड़ी विफल। क्या यह Oracle से oracle.com/technetwork/java/javase/tsg-vm-149989.pdf पर बदल गया है ?
मौका

तीसरी कड़ी भी विफल
ह्यूगो ज़रागोज़ा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.