gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 10:53:43 25 4
gpt4 key购买 nike

我正在尝试获取 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”和“Exited while loop”从不输出到日志。我已经在我的 win7 本地计算机和输出信息的服务器上的命令提示符下运行了命令。我也在我的本地机器上运行了上面的代码,它也工作正常。看起来这是 Java 和 Windows Server 2003 之间的一些问题,我在过去 3 小时的谷歌搜索中未能找到。任何帮助将不胜感激。

最佳答案

在获取和使用InputStream 之前,您需要获取并关闭OutputStream。这将向您已启动的流程确认您已完成向流程发送输入(在本例中为无输入)。

p.getOutputStream().close();

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

关于Java 卡在无限循环中,在 Windows Server 2003 上执行 wmic 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13367527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com