2016-06-29 1 views
1

Я hava командной строки, которая обрабатывает более 5 минут. когда я вызываю командную строку с ProcessBuilder, она работает, команда завершает работу с помощью 5 минут.Почему processBuilder в java зависает через 5 минут?

Принимая во внимание, что процесс зависает, если он занимает более 5 минут и не показывает улучшения процесса, пока я не покину процесс.

p = new ProcessBuilder("myprogram","with","parameter").start(); 
p.waitFor(); 

Пожалуйста, дайте мне знать, если вы не понимаете вышеуказанный вопрос?

+0

@ Ответ Матей Кормута является правильным. Вы должны позаботиться о стандартных дескрипторах файлов, связанных с процессом. Самый простой способ исправить это (для начинающих) 'p = new ProcessBuilder (« myprogram »,« with »,« parameter »). InheritIO(). Start();' предполагается, что вы находитесь на Java 7+. –

ответ

2

Проблема может заключаться в том, что команда «myprogram» производит некоторый вывод, и вы ее не читаете. Это означает, что процесс блокируется, как только буфер заполняется, и ждет, пока ваш процесс продолжит чтение. Ваш процесс, в свою очередь, ждет завершения другого процесса (чего не будет, потому что он ждет вашего процесса, ...). Это классическая тупиковая ситуация.

Вам необходимо постоянно читать поток потоков процессов, чтобы гарантировать, что он не блокируется.

Javadocs говорит:

Процесс Класс

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^