【问题标题】:Command prompt is not closing after completing even after writing exit即使在写入退出后,命令提示符也不会在完成后关闭
【发布时间】:2020-07-23 13:59:32
【问题描述】:

我有以下java代码

public static void main(String a[]) {
        String location = "C:\\Users\\test\\output\\testProject";
        File dir = new File("C:\\Users\\test\\cmds");
        ProcessBuilder pb = new ProcessBuilder("cmd.exe", "/C", "Start /wait","packageProject.bat",location);
        pb.directory(dir);
        Process p = null;
        try {
            p = pb.start();
            p.waitFor();
        }
        catch (IOException e) {
            e.printStackTrace();
        }
        catch(InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("Folder created");
    }

批处理文件是

cd "C:\Users\test\output\test-master"

mvn clean install -DskipTests

exit

它是打包文件,但不是命令提示符,一旦过程完成就不会关闭。

请提出建议。

【问题讨论】:

  • 一个控制台会话不会自动结束,只要它有客户端进程或者进程有一个句柄到它的输入缓冲区或它的屏幕缓冲区之一。如果mvn 启动附加到控制台并在 mvn.exe 退出后仍在运行的进程,则可能会发生这种情况。

标签: java windows processbuilder


【解决方案1】:

您应该删除包装器 CMD.EXE 并启动,只需将批处理文件直接调用为:

String bat = new File(dir, "packageProject.bat").getAbsolutePath();
ProcessBuilder pb = new ProcessBuilder(bat , location);
pb.directory(dir);
Process p = pb.start();
p.waitFor();

如果此过程产生大量输出,如果您不使用错误和输出流,您可能会遇到第二个问题。您可以在后台线程中执行此操作,或者通过在 pb.start() 之前添加这些调用来简单地将 stdout/err 发送到文件:

pb.redirectOutput(new File(location, "std.out"));
pb.redirectError(new File(location, "std.err"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2017-10-11
    相关资源
    最近更新 更多