当前位置: 首页 > 面试题库 >

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

高经艺
2023-03-14
问题内容

我正在尝试获取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之间的问题。任何帮助将非常感激。


问题答案:

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

p.getOutputStream().close();

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



 类似资料:
  • 我有一个程序,当你点击按钮,它将执行一个名为

  • 问题内容: 请看下面的Java 无限循环。它导致其下面的语句的编译时错误。 以下相同的无限循环可正常工作,并且不会发出任何错误,其中我只是用布尔变量替换了条件。 同样在第二种情况下,循环之后的语句显然不可访问,因为布尔变量为true,但编译器根本没有抱怨。为什么? 编辑:显然,以下版本的卡在无限循环中,但是即使循环中的条件始终存在,因此循环下面的语句也不会对该语句下的语句发出任何编译器错误,因此循

  • 首先,我不是程序员(只是对PHP有一些了解)。我制作了一个带有事件列表的网站,其中有一个选择字段,每月使用Ajax加载过滤事件。 该代码在大约3个月的时间里运行良好。但5天前,它突然停止工作,开始生成一个无限循环。 我调试了代码,发现问题出在“同时”循环上。我试图理解为什么这在一段时间内是完美的,然后它就不会了。(用无限循环崩溃服务器)。 这个函数只给出下个月的第一天。很好用。 这一个,为选择字段

  • 目前的任务是制作一个输血管理器应用程序,该应用程序可以有效地选择输血的献血者。 启动应用程序时,应尝试打开两个文件:“donors.txt”和“recipients.txt”。如果其中一个文件丢失,程序应宣布问题并退出。两个文件都应按以下方式格式化:每行应包含一个人的全名和他们的血型,用分号分隔。程序应首先读取donors.txt,将每行拆分为姓名和血型,并将生成的数组作为新元素存储在捐献者数组列

  • 问题内容: 我正在使用第三方库来处理大量数据集。该过程偶尔会陷入无限循环(或被阻塞- 不知道为什么并且无法进入代码)。我想在设定的时间后消除这个问题,然后继续处理下一个案件。一个简单的例子是: processData通常最多需要1秒。我想设置一个计时器,该计时器在10秒后杀死processData() 编辑我将不胜感激代码片段(我没有在使用Thread的过程中练习过)。执行器方法看起来很有用,但我

  • 我有2个JTextFields: 对于如何实现该行为的任何帮助都非常感谢,因为我必须为至少10个其他文本字段执行此操作。 谢谢你!