Java陷入无限循环,在Windows Server 2003上执行wmic命令

lan*_*cex 2 java windows windows-server-2003

我正在尝试获取Windows Server 2003计算机上正在运行的进程及其文件路径的列表.我正在使用以下代码尝试这样做:

protected Map<String,String> getProcesses() {
    Map<String,String> processes = new HashMap<String,String>();
    try {
        String line;
        Process p = null;

        // Windows
        if (OS.indexOf("win") >= 0) {
            p = Runtime.getRuntime().exec("wmic process get description,executablepath");
            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
            LOG.info("Entering while loop");
            while ((line = input.readLine()) != null) {
                LOG.info("blah");
                String[] array = line.split("\\s+");
                if (array.length > 1) {
                    processes.put(array[0], array[1]);
                }
            }
            LOG.info("Exited while loop");
            input.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return processes;
}
Run Code Online (Sandbox Code Playgroud)

该程序在while条件下陷入无限循环."blah"和"退出while循环"从不输出到日志.我在win7本地机器和服务器上的命令提示符下运行命令,输出信息就好了.我也在我的本地机器上运行了上面的代码也工作正常.看起来Java和Windows Server 2003之间的一些问题是我在过去3小时的谷歌搜索中找不到的.任何帮助将非常感激.

rge*_*man 10

OutputStream在获取和使用之前,您需要获取并关闭InputStream.这将确认您已经开始完成向流程发送输入(在这种情况下,没有输入)的过程.

p.getOutputStream().close();
Run Code Online (Sandbox Code Playgroud)

请记住,在Process对象上,getInputStream()输入来自进程的输出流,getOutputStream()输出将转到进程的输入流.