我有以下命令:
Error in scan(file = file, what = what, sep = sep, quote = quote, dec =
dec, :
scan() expected 'a real', got '"3"'
如何解析此命令的输出?
当我得到new ProcessBuilder()
.command("watch", "-n2", "ps", "-q", IdeProcess.pid, "-o", "rss");
的{{1}}时,每次都会得到一个空行。
-
我曾经通过Java重新启动命令,创建了一个新线程,然后又重新开始。现在,我决定在InputStream
的帮助下实施它。
代码段:
Process
答案 0 :(得分:0)
以下是您想要实现的目标的一个非常粗糙的例子。它使用以2秒为间隔运行的单线程执行程序服务,轮询给定进程的内存使用情况。
目前,这仅会将结果打印到控制台,但是您可以对其进行修改以返回Future
,以便获得结果。
我希望这会有所帮助。
private static ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
public static void main(String[] args) {
scheduledExecutorService.scheduleAtFixedRate(() -> {
try {
Process process = new ProcessBuilder("ps", "-p", "2782", "-o", "%mem").redirectErrorStream(true).start();
try(BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String s = reader.lines().collect(Collectors.joining("\n"));
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}, 0, 2, TimeUnit.SECONDS);
}
作为参考,我在这里使用ps
来获取有关进程的内存使用情况,但是您可以随意使用。