我正在用我的Java代码启动Java进程。我已经编写了一个函数来关闭此过程。但是该过程不会终止。
这是我创建过程的代码:
Process process = null;
final ProcessBuilder builder = new ProcessBuilder("java", "-jar", "-Xmx512M", "server.jar");
builder.directory(new File("temp/"+serverName+"/"));
try {
process = builder.start();
} catch (IOException e) {
e.printStackTrace();
}
Launcher.serverProcess.put(serverName, process);
从另一个类,我想停止服务器:
Process temp = Launcher.serverProcess.get(serverName);
while(temp.isAlive()) {
temp.destroy();
temp.destroyForcibly();
}
Launcher.serverProcess.remove(serverName);
输入命令停止进程后,我要删除目录。每当我尝试此操作时,只会告诉我该文件夹正在使用中,无法删除它。使用
taskkill / F / IM java.exe
可以停止该过程,然后可以删除该文件夹
最佳答案
我怀疑文件夹仍在使用中的问题可能是由于您具有开放流的Process实例。调用process.destroy()后,这些流的值仍处于打开状态,等待您访问它们。也可能是该进程还在该进程的当前目录(“ temp /” + serverName +“ /”)上也持有一个锁。
调用process.start()之后,您应该在后台线程中使用stdout / error流,或者也许在调用process.destroy()时尝试显式关闭它们,并查看是否允许您清除进程留下的文件夹你跑了。
process.getInputStream().close();
process.getErrorStream().close();
关于java - 由ProcessBuilder创建的进程不会终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60081554/