Убийство подпроцесса, когда он ожидает ввода - PullRequest
0 голосов
/ 11 марта 2019
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 (дочерний процесс спрашивает пользователя «хочет ли пользователь продолжать следующий цикл» бесконечно), и это убивает родительский процесс (текущий поток).Как убить дочерний процесс, когда он отображает вопрос (то есть ожидает ввода), не убивая родителя.

заранее спасибо ..

...