powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Зависание при вызове waitFor()
18 сообщений из 18, страница 1 из 1
Зависание при вызове waitFor()
    #37641395
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делаю:

Код: java
1.
2.
Process p = Runtime.getRuntime().exec("...");
p.waitFor();



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

Как побороть проблему?
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641408
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spТам констатируют факт ошибки но никаких советов как этого избежать не дают - нахрен статьи с констатацией и так извесного всем факта?

Попробуй до конца дочитать
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=2
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=3
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4

Если Java 7, то там уже есть готовые redirect методы.
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641413
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь ещё первые 7-8 тем почитайте
http://www.sql.ru/forum/actualsearch.aspx?search=ProcessBuilder&sin=0&bid=38&a=&ma=0&dt=-1&s=1&so=1
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641486
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

самое смешное, что я не написал - у меня после Runtime.getRuntime().exec(...)
читается выходной буфер, но моя ошибка состояла в том что я вызывал break, а не вычитал весь буфер до конца!

Код: java
1.
2.
3.
4.
5.
6.
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null; 
while ((line = in.readLine()) != null) {
  ....
  break; //<---ошибка - никогда так не делайте!
}



но, кто бы знал что его надо вычитать весь да еще и в случае ошибок необходимо вычитывать весь ErrorStream!?
Воистину - если пишешь простой интерфейс - обеспечь ему простую и прозрачную работу!
Тут разработчики сделали засаду для тех кто не знает сложностей этого метода!
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641544
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только вот вопрос остался - если мне не нужно знать результат выполнения Runtime.getRuntime().exec и я не вычитывал буферы - что будет с системой
(
- команда выполняется, но а что с явой?
- что она себе там внутри думать будет?
- не будет ли там собирать у себя всякий мусор?
- и нужно ли в любом случае вычищать эти буферы или буфера
)?
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641622
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp- команда выполняется, но а что с явой?

Команда выпонлняется, только до тех пор, пока ей не нужны IO потоки процесса. Если они ей не нужны вообще. То и проблем не будет. Если она начнет вывод, то её поток заблокируется на на операции вывода и будет ждать, пока Java процесс этот вывод не вычитает. Можно запускать команды через shell так чтобы они порождали дополнительный процесс. Например start cmd. Тогда сам доченрний процесс сразу же завершается, а процесс команды является внучатым и работает спокойно.
Но waitFor() при этом смысл теряет.

sp- что она себе там внутри думать будет?

Java? Ничего не будет думать. Она не может думать ни внутри, ни снаружи.

sp- не будет ли там собирать у себя всякий мусор?

Сборка мусора работает в параллельных потоках, ваши потоки на неё не особо влияют.

sp- и нужно ли в любом случае вычищать эти буферы или буфера
)?
Reader это тот же Stream, только для текстового потока. Ничего там вычищать не нужно. Можно вызвать close() при желании. Но есть ли смысл, не уверен.
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641672
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

так сложно ответили, что я не понЯл или не пОнял :)
если я буду выполнять excec и затем плевать на результат - что будет? процессы так и зависнут в памяти или все будет нормально?
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641683
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spесли я буду выполнять excec и затем плевать на результат - что будет? процессы так и зависнут в памяти или все будет нормально?
Зависит от процесса.
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641690
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczspесли я буду выполнять excec и затем плевать на результат - что будет? процессы так и зависнут в памяти или все будет нормально?
Зависит от процесса.

а что от него может зависеть??
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641801
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spа что от него может зависеть??
Если он пишет в свой out, то он блокируется ("зависает"), потому что Java не вычитывает оттуда данные.
Если он ничего никуда не пишет, то спокойно отработает без зависания.
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37641996
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczspа что от него может зависеть??
Если он пишет в свой out, то он блокируется ("зависает"), потому что Java не вычитывает оттуда данные.
Если он ничего никуда не пишет, то спокойно отработает без зависания.

т.е. иными словами - если процесс выводит что-то в stdout - нужно обязательно вычитывать ErrorStream и InputStream!?
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37642001
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
spт.е. иными словами - если процесс выводит что-то в stdout - нужно обязательно вычитывать ErrorStream и InputStream!?Не в этом дело. Просто если процесс пишет МНОГО в какой-либо из этих потоков, то конкретная ОСь может отмочить какую-нибудь хрень, например - перестать выполнять этот процесс до освобождения места в потоке. Поэтому, что бы обезопасить себя от таких кренделей, оба выходных потока надо вычитывать.
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37642024
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomspт.е. иными словами - если процесс выводит что-то в stdout - нужно обязательно вычитывать ErrorStream и InputStream!?Не в этом дело. Просто если процесс пишет МНОГО в какой-либо из этих потоков, то конкретная ОСь может отмочить какую-нибудь хрень, например - перестать выполнять этот процесс до освобождения места в потоке. Поэтому, что бы обезопасить себя от таких кренделей, оба выходных потока надо вычитывать.

перефразирую - желательно всегда вычитывать!
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37642054
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕсли Java 7, то там уже есть готовые redirect методы.

а что там в 7ке?
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37642055
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37642075
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html Да ProcessBuilder и до семерки редиректить умел :)
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37642079
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomДа ProcessBuilder и до семерки редиректить умел :)
Даже, не знаю что ответить, чтобы не нагрубить:

rtfm redirectInput
...
Since:
1.7
...
Рейтинг: 0 / 0
Зависание при вызове waitFor()
    #37642280
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz ,
Ааа, вы про это. Я то думал речь идет про редирект errorStream в outputStream.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Зависание при вызове waitFor()
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]