我正在写这个服务器,我想检查同一个程序是否已经在运行,如果正在运行关闭程序。
说我运行ServerA
然后我运行ServerB(它是同一台服务器)
我想关闭ServerA,以便ServerB可以成功运行。
答案 0 :(得分:1)
好的,我设法这样做......
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();
}
}
答案 1 :(得分:0)
如果要打开程序,请关闭程序
你可以去:
System.exit(0);
还有许多其他退出代码,但0似乎符合您的要求。
答案 2 :(得分:0)
使用系统通过pid终止进程是一个解决方案。
可以使用 RMI (远程方法调用)来创建单实例应用程序,或者在您的情况下发送kill调用,以便应用程序可以自行终止。 (优雅终止,要求应用仍在运行。)
您还可以使用 OSGi 容器:使用模块生命周期最佳。