2014-11-21 104 views
0

我希望我的java程序檢查它的另一個實例是否已經在運行,如果是這種情況(在Windows平臺上),請殺死它。我這樣做的代碼Java kill程序如果已經運行

String CMD = 
     "wmic PROCESS where \"CommandLine like '%%MyProgram%%'\" Call Terminate"; 
Process process = Runtime.getRuntime().exec(CMD); 

的代碼執行成功地,如果它被發現殺死正在運行的程序,但執行一次它也迫使調用程序退出(必須有系統的一些隱藏的電話。出口())。有沒有一種方法可以在不退出調用程序的情況下執行該命令?

+3

我相信這個命令也會捕獲當前的實例,所以它終止所有其他實例,並且這個也是。 – parakmiakos 2014-11-21 13:52:43

+0

這不是一種終止當前正在運行的進程而不是根本不啓動新進程的不好方法嗎?只是有點想... – bobbel 2014-11-21 13:54:12

+0

是的,它必須趕上目前的情況,我不知道爲什麼我沒有想到它。但問題仍然存在:只有在沒有其他實例已經運行的情況下才能執行程序? – splinter123 2014-11-21 13:56:23

回答

0
try { 
    ServerSocket ss = new ServerSocket(1044); 
} catch (IOException e) { 
    System.err.println("Application already running!"); 
    System.exit(-1); 
} 

多平臺,6條線。唯一的問題是,端口1044(您可以更改它)必須打開。基本上,運行該程序將建立一個「服務器」,但如果該端口已經是服務器,則該服務器已經啓動並關閉。

只要記住在同一個端口上啓動服務器與另一臺服務器是不可能的,我們可以利用這個優勢。

相關問題