我需要用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();
}

抱歉,如果我在某个地方有错别字,我是手工抄写的。
谢谢!

最佳答案

我想strace会把它的输出写到stderr。
所以解决办法是:

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

关于java - 运行strace并使用Java获取输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25642564/

10-10 23:46