Runtime Exec неожиданно остановился - PullRequest
2 голосов
/ 21 ноября 2011

У меня есть небольшая исполняемая программа на C, которая выводит много файлов в файл. Когда я вызываю эту программу с помощью Runtime, вот так:

Runtime r = Runtime.getRuntime();
Process p = null;

p = r.exec("./my_program -in input.file -out output.file", null, new File(System.getProperty("java.io.tmpdir")));

Когда программа выдает низкий вывод, все в порядке, но когда я вызываю "* my_program *" с большим вводом, она выдаст большое количество вывода в файл output.file, но в этом случае моя программа на Java зависнет и ничего не происходит ...

Я тестирую "* my_program *" в терминале с большим количеством вводов, и все в порядке, но когда я вызываю программу на Java с помощью Runtime.exec, программа на Java останавливается.

- Заранее спасибо

1 Ответ

1 голос
/ 21 ноября 2011

Убедитесь, что вы читаете из процессов .getOutputStream() и .getErrorStream(), если вы еще этого не сделали. Глядя на ваш фрагмент кода, кажется, что вы просто выполняете .exec(...) (и, возможно, ожидаете его завершения с вызовом, не показанным на .waitFor()?).

За http://download.oracle.com/javase/6/docs/api/java/lang/Process.html (выделение добавлено):

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

...