2011-06-02 61 views

回答

0

我記得前面提到的similar question。一種可能的行動方式是使用SignalHandler。您可以閱讀full article here。它似乎與IBM JVM有關,但我認爲它對於Java Hotspot同樣有效。

的Java的一個鮮爲人知的功能是安裝 自己的信號處理程序,這是 通過sun.misc.Signal 類支持的 能力的應用程序。但是,在使用sun.misc數據包 中的 類時請小心,因爲它包含可能在Java發行版之間更改 的未記錄的 支持類。您可以爲 安裝JVM未使用的任何信號 的Java處理程序。這些 信號處理程序類似於本機 處理程序,因爲它們在 引發本機系統信號時調用,但它們將始終作爲單獨的 Java線程運行。本質上,當引發信號處理器可用的 信號時,JVM的 「信號分配器線程」被喚醒 並通知信號。分派器線程然後調用Java 方法來爲安裝的Java信號處理器創建並啓動新的 線程。要編寫處理器的Java信號 ,請定義一個類,該類使用sun.misc.Signal.handle() 方法實現sun.misc.SignalHandler接口並通過 註冊處理程序。

0

使用命令$?檢查返回sttaus

2

您可以在啓動時編寫文件並在優雅退出時再次刪除文件。如果JVM消失了,但文件仍然存在,那麼您就知道它已經崩潰或以非預期的方式退出。

+1

+1但是......如果您嘗試正確地做到這一點,那麼有很多難點。例如,您在哪裏以及如何知道在哪裏存儲文件?例如,在OS X上,由* tmpdir *屬性返回的位置可以**從一次運行改變到另一次運行。然後您需要知道文件保存位置的方法(比如使用Preferences API)。另外,這並不是因爲您有權寫入一些臨時文件,您將在下一次運行中獲得相同的權利。如果兩個實例運行,等等。它可以工作,但它比你的答案聽起來更像是複雜得多**。 – SyntaxT3rr0r 2011-06-02 11:05:13

+0

@ SyntaxT3rr0r:是的,你說得對,雖然複雜程度取決於需要什麼類型的應用程序。對於服務器應用程序,您通常需要一些定義良好的目錄,您可以在其中編寫文件。對於桌面應用程序,瞭解由於意外關機而導致應該發生什麼以提供更詳細的解決方案會很有幫助。 – x4u 2011-06-02 11:55:50

0

當JVM正常關閉時,這意味着主線程已經結束。如果JVM正在關閉某些其他重新設置(例如,用戶按下了Strg + C),則主線程仍在運行。因此,您可以在關閉鉤子中存儲對主線程的引用,並檢查該線程是否仍然存在。當然,這假定主線程通常是應用程序中最後一個正在運行的線程。如果其中一個線程稱爲System.exit(),我不知道情況如何,但是您可以輕鬆找到它。

相關問題