Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行strace并使用Java获取输出_Java_Linux_Strace - Fatal编程技术网

运行strace并使用Java获取输出

运行strace并使用Java获取输出,java,linux,strace,Java,Linux,Strace,我需要用Java自动运行strace(当然是在linux系统上)。 因此,当我执行以下操作时: strace -f echo hi 我得到输出: hi 然而,当我在终端中运行命令时,我得到了通常的输出(系统调用和所有东西)。 我有一个解决方案,我使用“-o”标志将strace输出重定向到一个文件,然后读取该文件以获得输出,但这对我不再有好处。 所以我不明白,我做错了什么 以下是我执行命令的代码: System.out.println(exec("strace -f -q echo hi"))

我需要用Java自动运行strace(当然是在linux系统上)。 因此,当我执行以下操作时:

strace -f echo hi
我得到输出:

hi
然而,当我在终端中运行命令时,我得到了通常的输出(系统调用和所有东西)。 我有一个解决方案,我使用“-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()));

实际问题是什么,没有输出?我得到了“echo hi”的输出。不是strace的输出。好像我根本不用strace。