首页 > 解决方案 > 在期望输入时杀死子进程

问题描述

public static int launch(String pathTojar ,String params) throws IOException, InterruptedException {

    byte[] buffer = new byte[1024];      
    ProcessBuilder processBuilder = new ProcessBuilder("java", "-jar", pathTojar, "L", "C", params);
    processBuilder.redirectErrorStream(true);
    processBuilder.redirectInput(ProcessBuilder.Redirect.INHERIT);
    Process process = processBuilder.start();
    //kill child process when parent process dies
    Runtime.getRuntime().addShutdownHook(new Thread(process::destroyForcibly));
    InputStream in = process.getInputStream();

    Thread t = new Thread(() -> {
        while (true) {
            int r = 0;
            try {
                r = in.read(buffer);
            } catch (IOException e) {
                e.printStackTrace();
            }
            if (r <= 0) {
                break;
            }
            System.out.write(buffer, 0, r);
        }});
        t.start();

    return process.waitFor();
}

子进程仅退出CTRL+C(子进程询问用户'如果用户想继续下一个循环'无限)并且杀死父进程(当前线程)。如何在显示问题(即期待输入)时杀死子进程而不杀死父进程。

提前致谢..

标签: javaprocessbuilder

解决方案


推荐阅读