我有以下方法,它将一个命令作为一个进程执行并返回输出:
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秒。我怎么能做到这一点?
答案 0 :(得分:0)
Process
有一个方法waitFor
。它可用于强制超时。例如:
if ((p = Runtime.getRuntime().exec(execPath)) != null) && !p.waitFor(TIMEOUT_CONSTANT, TimeUnit.SECONDS)) {
p.destroyForcibly();
}