Получение противоречивого результата от process.getInputStream () - PullRequest
0 голосов
/ 09 ноября 2019

У меня странная проблема. Пытаясь выполнить следующий фрагмент кода, этот код в основном возвращает идентификатор процессора. Но иногда следующая функция возвращает пустое значение lines. Я не могу воспроизвести проблему локально, но эта проблема возникает в производстве время от времени.

Что может быть не так, я предполагаю, что это как-то связано с Process, но не уверен? Обратите внимание , если вы выполните wmic cpu get processorid в командной строке Windows, она всегда вернет processorId .

В данном конкретном случае cmdarray = [wmic, cpu, get, ProcessorId]

private static List<String> exec(String ... cmdarray) {
    final List<String> lines = new ArrayList<>();
    try {
        Process proc = Runtime.getRuntime().exec(cmdarray);
        try (BufferedReader inp = new BufferedReader(new InputStreamReader(proc.getInputStream()))) {
            String line;
            while ((line = inp.readLine()) != null) {
                if (line.trim().length() > 0) lines.add(line.trim());
            }
        }

        waitForProcess(proc);
    } catch (IOException e) {
        Debug.fail(e);
    }
    return lines;
}
...