Процесс Windows exec'ed от Java, не завершающегося

Вы правы. Это скалярный подзапрос . Такой подзапрос возвращает один столбец и не более одной строки. Значение рассматривается как скалярное значение в запросе.

В данном случае это запрос агрегации, в котором учитываются совпадающие строки. Итак, эта логика требует как минимум двух совпадений.

9
задан David Resnick 10 July 2011 в 07:56
поделиться

3 ответа

Вероятно то, что просто необходимо считать stdout и stderr процесса, или он зависнет, так как его буфер вывода полон. Это является самым легким при перенаправлении stderr к stdout, только для сейфа:

public static void main(String[] args) throws IOException,
                InterruptedException {
        String[] cmd = new String[] { "cmd.exe", "/C", "dir", "2>&1" };
        Process process = Runtime.getRuntime().exec(cmd);
        InputStream stdout = process.getInputStream();
        while( stdout.read() >= 0 ) { ; }
        process.waitFor();
    }
}
11
ответ дан 4 December 2019 в 10:34
поделиться

См. эту ссылку для объяснения.

Необходимо считать входной поток. Также процесс Java не работает как оболочка DOS. Необходимо передать аргументы сами:

String[] cmd = new String[3];
cmd[0] = "cmd.exe" ;
cmd[1] = "/C" ;
cmd[2] = "dir";
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec(cmd);
9
ответ дан 4 December 2019 в 10:34
поделиться

Необходимо попытаться использовать a ProcessBuilder как показано ниже. Не уверенный, что отличается, но это решило МНОГО проблем для нас.

ProcessBuilder pb = new ProcessBuilder(CMD, ARG1, ARG2);  
Process p = pb.start();
0
ответ дан 4 December 2019 в 10:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: