java - 在期望输入时杀死子进程
问题描述
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
(子进程询问用户'如果用户想继续下一个循环'无限)并且杀死父进程(当前线程)。如何在显示问题(即期待输入)时杀死子进程而不杀死父进程。
提前致谢..
解决方案
推荐阅读
- swift - Swift 中的类型 '()' 指的是什么
- ruby-on-rails - 更正我的代码:Sort_by 2 属性,如果它是两个值之一,则第一个属性遵循第二个属性
- postgresql - 如何做 PostgreSQL '||' 带有 knex.update 的运算符
- css - (NodeJS) Selenium Webdriver findElement.By.css() 页面有多个时只返回一个值
- tabulator - 来自 URL 的 Tabulator JSON Ajax API 数据
- python - Django 测试 - 等待子进程准备好
- java - 如何使项目描述堆叠在账单上?
- adonis.js - 如何在adonis js查询生成器中添加'date_add()'
- c# - 在 64 位 cpu 上读取/写入 64 位值是原子的吗?
- ag-grid - (ag-grid)动画动态添加的列