使用InputStream解析命令watch

时间:2018-08-25 07:24:59

标签: java linux shell

我有以下命令:

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

1 个答案:

答案 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来获取有关进程的内存使用情况,但是您可以随意使用。