如何关闭程序,如果已在Java中打开
即时通讯编写此服务器,并且我想检查是否相同的程序已在运行,如果正在运行关闭程序。如何关闭程序,如果已在Java中打开
说我运行服务器A
然后我运行服务器B(至极是在同一台服务器)
我想关闭服务器A,以便服务器B可以成功地运行。
好吧,我能做到像这样......使用
public static void main(String[] args){
String PIDtoKill = readPIDFile();
if(!PIDtoKill.isEmpty())
killPID(PIDtoKill);
saveThisPIDtoFile();
}
方法....
private static String readPIDFile() {
try {
for (String line : Files.readAllLines(Paths.get("C:\\Users\\MyUser\\Desktop\\PIDsRunning.txt")))
return line;
}
catch (IOException e1) {
e1.printStackTrace();
}
return "";
}
private static void saveThisPIDtoFile() {
String pid = ManagementFactory.getRuntimeMXBean().getName();
pid = pid.substring(0, pid.indexOf("@"));
List<String> lines = Arrays.asList(pid);
Path file = Paths.get("C:\\Users\\MyUser\\Desktop\\PIDsRunning.txt");
try {
Files.write(file, lines, Charset.forName("UTF-8"));
}
catch (IOException e) {
e.printStackTrace();
}
}
private static void killPID(String pIDtoKill) {
try {
Runtime.getRuntime().exec("taskkill /F /PID " + pIDtoKill);
}
catch (IOException e) {
e.printStackTrace();
}
}
请记住,如果你采取这种途径,跨平台的支持(过去的Windows),你需要找到操作系统,并调用操作系统相应的命令'taskkill' –
谢谢,我知道但这只是为了devoloping的目的,也许我离开它,因为这个程序将运行在Windows VPS上。 –
如果你想关闭的程序,如果它是开放的
你可以去:
System.exit(0);
还有很多其他退出代码,但0似乎符合您的要求。
是的,但我不想关闭当前的程序,我想关闭运行的程序,以便新程序可以运行 –
使用系统杀pid的过程是一个解决方案。
可以使用RMI(远程方法调用)创建单个实例应用程序,或者在您的情况下发送kill函数,以便应用程序可以自行终止。 (正常终止,需要应用来仍在运行。)
你也可以使用一个OSGi的容器:与模块生命周期的最佳发挥。
查看是否[this](http://stackoverflow.com/questions/660205/start-java-program-only-if-not-already-running)回答您的查询。 – VHS
'ServerB'需要管理员权限才能关闭'ServerA'。 –
调用'pkill'可能是一个简单的解决方案。虽然在包装你的程序的shell脚本中执行它可能更容易,而不是用Java构建它。 –