Выполнение оболочки управляет от Java

Я пытаюсь выполнить команду оболочки из JAVA-приложения на платформе GNU/Linux. Проблема состоит в том, что сценарий, который называет другое JAVA-приложение, никогда не заканчивается, хотя это работает успешно от удара. Я пытался отладить его:

(gdb) bt
#0  0xb773d422 in __kernel_vsyscall ()
#1  0xb7709b5d in pthread_join (threadid=3063909232, thread_return=0xbf9cb678) at pthread_join.c:89
#2  0x0804dd78 in ContinueInNewThread ()
#3  0x080497f6 in main ()

Я попробовал: ProcessBuilder (); и Runtime.getRuntime () .exec (cmd);

Похож на него, ожидает чего-то для окончания. Какие-либо идеи?

Спасибо, Laurențiu

6
задан Laurențiu Dascălu 17 June 2010 в 14:04
поделиться

1 ответ

Вы обрабатываете стандартный ввод и стандартный вывод? Из javadocs:

Поскольку некоторые родные платформы предоставляют только ограниченный размер буфера для стандартных потоков ввода и вывода, неспособность своевременно записать входной поток или прочитать выходной поток подпроцесса может привести к блокировке подпроцесса и даже к тупику.

Process cmdProc = Runtime.getRuntime().exec(command);


BufferedReader stdoutReader = new BufferedReader(
         new InputStreamReader(cmdProc.getInputStream()));
String line;
while ((line = stdoutReader.readLine()) != null) {
   // process procs standard output here
}

BufferedReader stderrReader = new BufferedReader(
         new InputStreamReader(cmdProc.getErrorStream()));
while ((line = stderrReader.readLine()) != null) {
   // process procs standard error here
}

int retValue = cmdProc.exitValue();
15
ответ дан 8 December 2019 в 15:59
поделиться
Другие вопросы по тегам:

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