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 条件でプログラムが無限ループに陥ります。「何とか」と「Exited while loop」はログに出力されません。win7ローカルマシンとサーバーの両方でコマンドプロンプトでコマンドを実行し、情報を正常に出力しました。また、ローカル マシンで上記のコードを実行しましたが、これも正常に動作します。Java と Windows Server 2003 の間の問題のようですが、過去 3 時間のグーグル検索では見つけられませんでした。どんな助けでも大歓迎です。