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