Windows管道悬挂

时间:2012-08-20 19:49:56

标签: java windows pipe

这是一个令人沮丧的问题。我正在运行以下Java代码:

       try {
            String query = someQuery, input = someInput;
            ProcessBuilder pb = new ProcessBuilder("cmd", "/c", query); // Windows
            Process p = pb.start();

            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));

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

            try
            {
                // Input to the query
                OutputStream os = p.getOutputStream();
                os.write(input.getBytes());
                os.flush();
                os.close();
            } catch (IOException e)
            {
            }

            System.out.println("STDIN : \n");

            while ((s = stdInput.readLine()) != null)
            {
                System.out.println(s);
            }

            System.exit(0);
        } catch (IOException e)
        {
            e.printStackTrace();
        }

query是一个管道命令。 query中的每个子命令都是类似unix的API调用(如果有人感兴趣的话,专有:Sirsi Unicorn API);它也是一个数据库调用。 Windows命令提示符可以容纳这些API调用。

问题:

如果我尝试管道2个数据库命令,程序运行成功,但如果我管道3个数据库命令,程序就会挂起。如果在cygwin上运行这些相同的命令,程序运行正常。有趣的是,如果我将3管道命令分成两个单独的命令,程序运行正常。

问题:

我的问题是 - 在Windows命令行上是否存在管道缓冲问题?是否存在窗户上的管道不起作用的情况?管道可以超时吗?

此时,任何信息都表示赞赏。

0 个答案:

没有答案