Java kill程序(如果已经运行)

Java kill程序(如果已经运行),java,cmd,Java,Cmd,我想让我的java程序检查它的另一个实例是否已经在运行,如果是这样的话(在Windows平台上),就杀死它。我是用密码做的 String CMD = "wmic PROCESS where \"CommandLine like '%%MyProgram%%'\" Call Terminate"; Process process = Runtime.getRuntime().exec(CMD); 代码成功执行并在找到运行的程序时终止它,但是一旦执行,它也会强制调用程序退出(必须

我想让我的java程序检查它的另一个实例是否已经在运行,如果是这样的话(在Windows平台上),就杀死它。我是用密码做的

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

代码成功执行并在找到运行的程序时终止它,但是一旦执行,它也会强制调用程序退出(必须有一些对System.exit()的隐藏调用)。有没有一种方法可以在不退出调用程序的情况下执行该命令?

如注释中所述,该命令还将终止新实例。有很多解决方法,比如确保只有一个实例在运行。但这可能无关紧要,因为有更好的方法可以做到这一点


请检查,您可以利用Windows服务来实现这一点。您将知道只有一个实例将运行+您可以让它在没有用户登录的情况下运行(如果需要)。将Apache Commons守护程序与ProLUN一起使用(如果仅适用于Windows):

更多选项和探索守护进程和Java的SO参考:

祝你好运

try {
    ServerSocket ss = new ServerSocket(1044);
} catch (IOException e) {
    System.err.println("Application already running!");
    System.exit(-1);
}
多平台,6条线路。唯一的问题是端口1044(您可以更改)必须打开。基本上,运行该程序将建立一个“服务器”,但如果该端口已经是服务器,则该端口已经启动,并且将关闭

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


我相信这个命令也会捕获当前实例,因此它会终止所有其他实例,也会终止这个实例。终止当前正在运行的进程而不是根本不启动新进程不是一个坏方法吗?只是想一想……是的,它必须抓住当前的例子,我不知道为什么我没有想到它。但问题仍然存在:只有在没有其他实例正在运行的情况下,如何执行程序?只需检查是否有其他类似于您的进程,并使用类似于
System.exit(0)
的方法终止您自己的实例即可。