Java kill程序如果已经运行了

时间:2014-11-21 13:50:56

标签: java cmd

我希望我的java程序检查它的另一个实例是否已经在运行,并且如果是这种情况则杀死它(在Windows平台上)。我正在用代码

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

代码成功执行并且如果找到则终止正在运行的程序,但是一旦执行它也强制调用程序退出(必须对System.exit()进行一些隐藏调用)。有没有办法在不退出调用程序的情况下执行命令?

3 个答案:

答案 0 :(得分:1)

如评论中所述,该命令也将终止新实例。有很多方法,比如creating pid files,以确保只运行一个实例。但这可能并不重要,因为有更好的方法可以做到这一点。

请检查How to implement a single instance Java applicationHow to allow running only one instance of a java program

答案 1 :(得分:0)

您可以利用Windows服务。您只知道一个实例将运行+您可以在没有用户登录的情况下运行它(如果需要)。将Apache Commons Daemon与procrun一起使用(如果仅适用于Windows):

http://commons.apache.org/proper/commons-daemon/index.html http://commons.apache.org/proper/commons-daemon/procrun.html

更多选项和探索守护进程和Java的SO参考: How to Daemonize a Java Program?

祝你好运!

答案 2 :(得分:0)

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

多平台,6行。唯一的问题是端口1044(您可以更改它)必须打开。基本上,运行该程序将建立一个"服务器",但如果该端口已经是服务器,它已经启动,它将关闭。

  

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