java - 由ProcessBuilder创建的进程不会终止

标签 java process processbuilder

我正在用我的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/

相关文章:

具有高嵌套级别的 Java 递归

java - 使用依赖项的资源?

java - 无法在 Cucumber jvm 中执行功能

java - 当我启动进程时我的 Jframe 卡住

java - 删除相同出现的特定字符

python - 可以同时做更多的 Action 吗?

c++ - 程序显示 program.exe 在启动后大约 4 秒停止工作

python - 我怎么知道子进程何时死亡?

java - 安全 Java Ping

java - 从 Java 应用程序执行 Jar 文件