有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案