一段时间后加入Java中的线程/进程 - Java

时间:2016-08-23 17:04:00

标签: java multithreading process java-threads

我有以下方法,它将一个命令作为一个进程执行并返回输出:

public String execute(String command) {
        StringBuffer output = new StringBuffer();
        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = "";
            while ((line = reader.readLine()) != null) {
                output.append(line + "\n");
            }
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
        return output.toString();
    }

每当命令返回时,此代码都很棒,但是对于继续运行的进程,例如top,这可能永远不会返回。代码不需要继续运行。它只需要捕获快照,或者它可能会在一段时间后超时,例如3秒。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

Process有一个方法waitFor。它可用于强制超时。例如:

if ((p = Runtime.getRuntime().exec(execPath)) != null) && !p.waitFor(TIMEOUT_CONSTANT, TimeUnit.SECONDS)) {
    p.destroyForcibly();
}