我只希望运行我的程序的一个实例。但是,如果他们开矿,我希望它能关闭较旧的矿井。

这是用Java编写的。

最佳答案

您可以将服务器套接字地址用作排他锁。

当您的应用启动时,它将尝试将服务器套接字绑定(bind)到预定义的地址。如果失败,则表示该应用的先前实例正在运行并拥有该地址。对该地址执行Ping操作,以告知所有者退出。

serverSocket = new ServerSocket(localhost:8888)
if success,
    start ServerSocketListeningThread
else
    socket = new Socket(localhost:8888)
    socket.close();
    sleep(100);
    repeat attempt of binding server socket

ServerSocketListeningThread
    serverSocket.accept();  //block until someone connects
    System.exit();

从命令行关闭应用很容易
telnet localhost 8888

09-10 04:13
查看更多