2011-11-17 14 views
9

मैं इतनी तरह मेरे जावा प्रोग्राम के क्रम के लिए एक बंद हुक जोड़ते हैं:शटडाउन हुक्स बुरा तोड़ जब

public class MyShutdownHook implements Runnable 
{ 
    @Override 
    public void run() 
    { 
     // Stuff I want executed anytime 
     // the program, Java, or the OS exits normally, 
     // crashes, or terminates unexpectedly for any reason. 
    } 
} 

// The in another method... 
Runtime.getRuntime().addShutdownHook(new MyShutdownHook()); 

... फिर वहाँ कभी किसी भी स्थितियों में, जहां कि run() विधि पर अमल नहीं करेंगे जब प्रोग्राम/जावा/ओएस सामान्य रूप से बाहर निकलता है, तो अप्रत्याशित रूप से दुर्घटनाग्रस्त हो जाता है या समाप्त हो जाता है? यदि हां, तो Runtime के शट डाउन हुक को पास करने में कौन सी स्थितियां सक्षम होंगी, और क्यों?

+1

की संभावना कभी छूट आपके कंप्यूटर पर एक परमाणु हमला। –

+0

क्या आप इस काम के बारे में जावाडोक के विवरण से परे अधिक जानकारी मांग रहे हैं? –

+0

@ मार्क पीटर्स::) मजाकिया मजाक ... लेकिन यह मत भूलना * सिगकिल * बहुत ज्यादा * एक परमाणु वाष्प है;) लिनक्स और ओएस एक्स दोनों पर (दो नाम केवल दो अन * एक्स-जैसे डेवलपर्स द्वारा उपयोग किए जाते हैं) * * हत्या -9 * * गारंटी * * प्रक्रिया को तुरंत मारने और अपने संसाधनों को जारी करने के लिए, कोई सवाल नहीं पूछा गया। नहीं * ShutDownHook *। कुछ भी नहीं। अब मैं सहमत हूं: जावा प्रक्रिया में * kill -9 * और परमाणु हमले के बीच कोई अंतर नहीं दिखाई देगा;) – TacticalCoder

उत्तर

6
  • यदि प्रक्रिया मारे जाती है, तो शट डाउन हुक निष्पादित नहीं किया जाएगा।

  • यदि प्रक्रिया क्रैश हो जाती है, तो शट डाउन हुक निष्पादित नहीं किया जाएगा।

  • यदि आपके पास Windows सेवा है और शटडाउन हुक निष्पादित करने में लंबा समय लगता है, तो इसे समाप्त कर दिया जाएगा।

+1

ध्यान रखें, सिगकिल, सिगरेट द्वारा केवल मारे गए हैं और इसी तरह शटडाउन हुक – Jarek

+2

चलाते हैं यदि प्रक्रिया को सिगरेट सिग्नल (यूनिक्स में नियमित "मार" कमांड भेजा जाता है) तो शट डाउन हुक चलाएगा। अगर सिग्कील (हत्या -9) भेजा जाता है तो यह केवल दौड़ने में असफल होगा। – Adamski

+0

यदि आप पेडेंटिक बनना चाहते हैं, तो अगर मैं '11 -12 'जावा प्रक्रिया को मारता हूं तो यह शट डाउन हुक नहीं चलाएगा। हालांकि मुझे लगता है कि आप कह सकते हैं कि "क्रैश" बुलेट के नीचे आता है। –

3

यदि आप अपने कंप्यूटर के पीछे प्लग खींचते हैं तो शट-डाउन हुक नहीं चलेगा। अन्य स्थितियों में शामिल हैं:

  • सिगकिल (-9) के साथ एक पॉज़िक्स ओएस पर प्रक्रिया को मार दिया जा रहा है।
  • इसी तरह यदि आप विंडोज के तहत "अनुत्तरदायी" प्रक्रिया को समाप्त करने का विकल्प चुनते हैं तो शट-डाउन हुक पूरा नहीं हो सकता है।
0

वे केवल तब चलते हैं जब प्रक्रिया "सामान्य रूप से बंद हो जाती है।" यदि ओएस से प्रक्रिया को मजबूती से मार दिया गया है या यदि संसाधन संसाधनों के कारण यह क्रैश हो रहा है (उदाहरण के लिए, स्मृति से बाहर), शट डाउन हुक नहीं लगाए जाएंगे।

0

जब आप ऐसा करेंगे Runtime.getRuntime().halt() JVM या जब ओएस भी जब आप ग्रहण कार्यक्रम को समाप्त कर दिया है (जब यह ग्रहण के तहत चल)

0

किसी भी समय JVM बाहर निकल सकते हैं, यह किसी भी सफाई चलाने की अनुमति के बिना प्रक्रिया को मारता है कृपा से, शट डाउन हुक चलाया जाता है। यह नहीं चलाया जाता है अगर:

  • JVM क्रैश। (कैसे/जब यह दुर्घटनाओं, हुक अभी भी चला सकते हैं पर निर्भर करता है, लेकिन कोई गारंटी बना रहे हैं)
  • JVM SIGKILL या इसी तरह हो जाता है, और तुरंत ओएस द्वारा बंद कर दिया गया है
संबंधित मुद्दे