我试图在Windows Server 2003机器上获取正在运行的进程及其文件路径的列表。我正在使用以下代码尝试执行此操作:Java在无限循环中停留在Windows Server 2003上执行wmic命令
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”和“Exited while loop”永远不会输出到日志。我在win7本地机器和输出信息的服务器上都运行了命令提示符。我也在我的本地机器上运行上面的代码,这也很好。看起来这是Java和Windows Server 2003之间的一个问题,我在过去的3个小时的搜索中没有找到。任何帮助将非常感激。
嗯,我会尝试'p.getOutputStream()。close(); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));'看看会发生什么。我会很快回报。 – lancex
嘿!嘿!有效!感谢您的帮助:) – lancex
您的答案解决了我的问题3个小时后头部划伤。我打算把它称为wmic中的一个bug,但我会采取工作。谢谢!!奇怪的是,如果将wmic输出重定向到文件并且不关闭输出流,它就会起作用。这不仅仅是一个java问题。我在vbscript测试用例中遇到了同样的问题。 –