运行strace并使用Java获取输出

时间:2014-09-03 10:57:33

标签: java linux strace

我需要使用Java自动运行strace(当然在Linux系统上)。 所以当我执行类似的事情时:

strace -f echo hi

我得到了输出:

hi

然而,当我在终端中运行命令时,我得到通常的输出(Syscalls和所有内容)。 我有这个解决方案,其中我使用“-o”标志将strace输出重定向到一个文件,然后读取文件以获得输出,但这对我来说不再有用。 所以我不明白,我做错了什么?

这是执行命令的代码:

System.out.println(exec("strace -f -q echo hi"));

private String exec(String cmd) {

    StringBuffer sb = new StringBuffer();
    try {
        Process p = Runtime.getRuntime().exec(cmd);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = "";
        while((line = input.readLine()) != null) {
            sb.append(line + "\n");
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return sb.toString();
}

对不起,如果我在某个地方有拼写错误,我就是手工复制这个。 谢谢!

1 个答案:

答案 0 :(得分:1)

我认为strace将它的输出写入STDERR。

所以解决方案是:

BufferedReader input = new BufferedReader(new InputStreamReader(p.getErrorStream()));