अद्यतन मई 2012 (2 और आधे साल बाद)
Trejkaz टिप्पणियों का उपयोग करने के लिए:
इस संकेत से निपटने कोड कारण विफल रहता है जावा के वर्तमान संस्करण पर "INT
" सिग्नल "वीएम या ओएस द्वारा आरक्षित है"।
इसके अतिरिक्त, जब कोई एप्लिकेशन बंद करने का अनुरोध करता है तो अन्य वैध सिग्नल नामों में से कोई भी वास्तव में आग नहीं लगाता है (मैंने केवल उन सभी को दर्दनाक रूप से परीक्षण किया है जिन्हें मैं ढूंढ सकता हूं ...)
शट डाउन हुक ज्यादातर काम करता है लेकिन हम पाते हैं कि हमारे मामले में यह फायरिंग नहीं है, इसलिए अगले कदम के पीछे JVM की पीठ
अध्याय "Integrating Signal and Exception Handling" "Troubleshooting Guide for HotSpot VM" के संकेतों का उल्लेख है "SIGTERM
, SIGINT
, SIGHUP
" एक हैंडलर पंजीकृत करने का सहारा लेना जाहिर है केवल सोलारिस ओएस और लिनक्स के लिए।
विंडोज़ पर केवल अपवाद हैंडलिंग का उल्लेख किया गया है।
मूल जवाब (सितम्बर 2009)
एक ShutdownHook उस मामले
Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
public void run() {
// what you want to do
}
}));
(caveats के साथ)
भी देखें संभालने के लिए सक्षम होना चाहिए:
सरल संकेत से निपटने का एक उदाहरण के रूप में:
public class Aaarggh {
public static void main(String[] args) throws Exception {
Signal.handle(new Signal("INT"), new SignalHandler() {
public void handle(Signal sig) {
System.out.println(
"Aaarggh, a user is trying to interrupt me!!");
System.out.println(
"(throw garlic at user, say `shoo, go away')");
}
});
for(int i=0; i<100; i++) {
Thread.sleep(1000);
System.out.print('.');
}
}
}
कैसे SIGINT सवाल से निपटने के लिए: http://stackoverflow.com/questions/2541475/capture- sigint-in-java –