2011-07-26 67 views
4

我正在運行一些java應用程序,我需要從Windows bat腳本中正常關閉/關閉所有應用程序。 所以我的問題是:
如何通過windows bat腳本調用shutdown hook並正常關閉java程序。如何正常關閉/終止java進程?

任何建議表示讚賞。 在此先感謝。

回答

4

Java中的「優雅」關閉通常通過讓所有非守護進程線程正常完成其工作來實現。如果您的應用程序在某個端口上偵聽「關閉」命令,則可以讓腳本觸發該端口的命令,然後您可以使用該命令爲線程設置適當的標誌以停止工作,讓JVM關閉。這可能是我見過它最簡單的方法。

3

您的.bat腳本將是虛擬機外部的一個進程。所以你需要在你的Java應用程序中實現某種IPC。一些相對簡單的選項可以使用RMI或JMX。

其他可能性是使用一些文件,可以由您的應用程序監視並可以通過.bat腳本進行修改,以便其他進程可以識別它需要關閉。

+1

Java 7(尚未發佈)具有文件監視API,現在您可以使用開源的JNotify庫。 – djna

5

查看Runtime類中的addShutdownHook方法。

Runtime.getRuntime().addShutdownHook(...); 

更新:根據下面的註釋,在Windows Shell中有一個類似於* nix kill命令的命令TASKKILL。例如TASKKILL /IM java.exe會終止所有的java進程。 TASKLIST可用於查找所有正在運行的進程。結合使用shutdownhook應該給你所需的優雅可能性。

+0

這是關於在關閉時調用線程,但不會觸發關閉本身。 – weekens