Java使用TimerTask杀死外部进程
我实现了一个方法,其中用processBuilder调用外部程序。如果外部进程花费的时间超过5秒(出于测试原因),我想停止该任务
当我使用流程时,实现工作得很好。exec()。但processBuilder没有。开始()
我读过一些帖子,但似乎不起作用,因为我不知道自己错过了什么
方法:
ProcessBuilder processBuilder = new ProcessBuilder("/.../test.bat -a -b -c").redirectErrorStream(true);
Process process = processBuilder.start();
Timer t = new Timer();
TimerTask killer = new TimeoutProcessKiller(process);
t.schedule(killer, 5 * 1000);
BufferedReader lineReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
lineReader.lines().forEach(str -> LOGGER.log(Level.INFO, str));
int lExitCode = process.waitFor();
if (lExitCode == 0) {
LOGGER.log(Level.INFO, "Process finished successful.");
} else {
LOGGER.log(Level.INFO, "Process finished not successful.");
}
killer.cancel();
时间输出处理器杀手
public class TimeoutProcessKiller extends TimerTask {
private Process p;
public TimeoutProcessKiller(Process p) {
this.p = p;
}
public void run() {
p.destroy();
}
}
谢谢你的建议
共 (0) 个答案