小编典典

Java卡在Windows Server 2003上的wmic命令执行的无限循环中

java

我正在尝试获取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;
}

在while条件下,程序陷入无限循环。“
blah”和“退出循环时退出”永远不会输出到日志。我已经在win7本地计算机和输出信息的服务器上的命令提示符中都运行了命令。我还在本地计算机上运行了上面的代码,它也可以正常工作。在过去三个小时的搜寻中,似乎找不到Java和Windows
Server 2003之间的问题。任何帮助将非常感激。


阅读 292

收藏
2020-11-26

共1个答案

小编典典

您需要先获取并关闭您的,OutputStream然后才能使用InputStream。这将向您确认已开始的过程已经完成向该过程发送输入(在这种情况下,没有输入)。

p.getOutputStream().close();

请记住,在Process对象上,getInputStream()输入来自流程的输出流,而getOutputStream()输出则进入流程的输入流。

2020-11-26