我只希望运行我的程序的一个实例。但是,如果他们开矿,我希望它能关闭较旧的矿井。
这是用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