2014-11-21 59 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(您可以更改它)必须打开。基本上,运行该程序将建立一个“服务器”,但如果该端口已经是服务器,则该服务器已经启动并关闭。

只要记住在同一个端口上启动服务器与另一台服务器是不可能的,我们可以利用这个优势。

相关问题