|
|
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
Делаю: Код: java 1. 2. и после этого до прихода нового Моисея можно идти курить, ну или пока свет не вырубят Прочитал, но нихрена не понял, статейку Там констатируют факт ошибки но никаких советов как этого избежать не дают - нахрен статьи с констатацией и так извесного всем факта? Как побороть проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 11:06:50 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
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 методы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 11:11:35 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
Вот здесь ещё первые 7-8 тем почитайте http://www.sql.ru/forum/actualsearch.aspx?search=ProcessBuilder&sin=0&bid=38&a=&ma=0&dt=-1&s=1&so=1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 11:13:04 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, самое смешное, что я не написал - у меня после Runtime.getRuntime().exec(...) читается выходной буфер, но моя ошибка состояла в том что я вызывал break, а не вычитал весь буфер до конца! Код: java 1. 2. 3. 4. 5. 6. но, кто бы знал что его надо вычитать весь да еще и в случае ошибок необходимо вычитывать весь ErrorStream!? Воистину - если пишешь простой интерфейс - обеспечь ему простую и прозрачную работу! Тут разработчики сделали засаду для тех кто не знает сложностей этого метода! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 11:44:05 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
только вот вопрос остался - если мне не нужно знать результат выполнения Runtime.getRuntime().exec и я не вычитывал буферы - что будет с системой ( - команда выполняется, но а что с явой? - что она себе там внутри думать будет? - не будет ли там собирать у себя всякий мусор? - и нужно ли в любом случае вычищать эти буферы или буфера )? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 12:02:01 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
sp- команда выполняется, но а что с явой? Команда выпонлняется, только до тех пор, пока ей не нужны IO потоки процесса. Если они ей не нужны вообще. То и проблем не будет. Если она начнет вывод, то её поток заблокируется на на операции вывода и будет ждать, пока Java процесс этот вывод не вычитает. Можно запускать команды через shell так чтобы они порождали дополнительный процесс. Например start cmd. Тогда сам доченрний процесс сразу же завершается, а процесс команды является внучатым и работает спокойно. Но waitFor() при этом смысл теряет. sp- что она себе там внутри думать будет? Java? Ничего не будет думать. Она не может думать ни внутри, ни снаружи. sp- не будет ли там собирать у себя всякий мусор? Сборка мусора работает в параллельных потоках, ваши потоки на неё не особо влияют. sp- и нужно ли в любом случае вычищать эти буферы или буфера )? Reader это тот же Stream, только для текстового потока. Ничего там вычищать не нужно. Можно вызвать close() при желании. Но есть ли смысл, не уверен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 12:35:56 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, так сложно ответили, что я не понЯл или не пОнял :) если я буду выполнять excec и затем плевать на результат - что будет? процессы так и зависнут в памяти или все будет нормально? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 12:55:28 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
spесли я буду выполнять excec и затем плевать на результат - что будет? процессы так и зависнут в памяти или все будет нормально? Зависит от процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 12:58:29 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
Blazkowiczspесли я буду выполнять excec и затем плевать на результат - что будет? процессы так и зависнут в памяти или все будет нормально? Зависит от процесса. а что от него может зависеть?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 13:01:42 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
spа что от него может зависеть?? Если он пишет в свой out, то он блокируется ("зависает"), потому что Java не вычитывает оттуда данные. Если он ничего никуда не пишет, то спокойно отработает без зависания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 13:39:16 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
Blazkowiczspа что от него может зависеть?? Если он пишет в свой out, то он блокируется ("зависает"), потому что Java не вычитывает оттуда данные. Если он ничего никуда не пишет, то спокойно отработает без зависания. т.е. иными словами - если процесс выводит что-то в stdout - нужно обязательно вычитывать ErrorStream и InputStream!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 14:58:51 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
spт.е. иными словами - если процесс выводит что-то в stdout - нужно обязательно вычитывать ErrorStream и InputStream!?Не в этом дело. Просто если процесс пишет МНОГО в какой-либо из этих потоков, то конкретная ОСь может отмочить какую-нибудь хрень, например - перестать выполнять этот процесс до освобождения места в потоке. Поэтому, что бы обезопасить себя от таких кренделей, оба выходных потока надо вычитывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 15:00:30 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
svenomspт.е. иными словами - если процесс выводит что-то в stdout - нужно обязательно вычитывать ErrorStream и InputStream!?Не в этом дело. Просто если процесс пишет МНОГО в какой-либо из этих потоков, то конкретная ОСь может отмочить какую-нибудь хрень, например - перестать выполнять этот процесс до освобождения места в потоке. Поэтому, что бы обезопасить себя от таких кренделей, оба выходных потока надо вычитывать. перефразирую - желательно всегда вычитывать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 15:08:44 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЕсли Java 7, то там уже есть готовые redirect методы. а что там в 7ке? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 15:19:03 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 15:20:22 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
Blazkowicz http://docs.oracle.com/javase/7/docs/api/java/lang/ProcessBuilder.html Да ProcessBuilder и до семерки редиректить умел :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 15:27:56 |
|
||
|
Зависание при вызове waitFor()
|
|||
|---|---|---|---|
|
#18+
svenomДа ProcessBuilder и до семерки редиректить умел :) Даже, не знаю что ответить, чтобы не нагрубить: rtfm redirectInput ... Since: 1.7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2012, 15:29:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37642054&tid=2132675]: |
0ms |
get settings: |
18ms |
get forum list: |
23ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
57ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
104ms |
get tp. blocked users: |
2ms |
| others: | 377ms |
| total: | 616ms |

| 0 / 0 |
