|
|
|
Внешний процесс из Java
|
|||
|---|---|---|---|
|
#18+
Добрый вечер, уважаемые. Сразу извиняюсь за возможный повтор вопроса или темы. Возник следующий вопрос: как отследить из Java, запустился ли сторонний процесс? Выполняю следующее: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Он запускает процесс, все окей. Но, если изменить путь, или название файла, которого в общем то нет вообще, то процесс не запустится, это видно из диспетчера задач, но все равно выведет что "Process started!!!!". Как узнать, запустился ли процесс или нет? Спасибо большое!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 21:51:48 |
|
||
|
Внешний процесс из Java
|
|||
|---|---|---|---|
|
#18+
Почуствуйте разницу. "Процесс запустился и завершился через секунду" и "Процесс запустился и не завершился". В обоих случаях процесс запустился что вы и проверяете. Посмотрите ProcessBuilder, Process.waitFor(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 22:05:13 |
|
||
|
Внешний процесс из Java
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПочуствуйте разницу. "Процесс запустился и завершился через секунду" и "Процесс запустился и не завершился". В обоих случаях процесс запустился что вы и проверяете. Посмотрите ProcessBuilder, Process.waitFor(); Так waitFor же блокирует основной поток, пока запущенный не выполнится? Или я путаю. Я думаю ТС надо отследить что процесс запустился и работает, и продолжать какую-то свою логику а не блокироваться.. А вот тут я хз как это сделать платформенно-независимым образом ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 22:10:32 |
|
||
|
Внешний процесс из Java
|
|||
|---|---|---|---|
|
#18+
забыл никТак waitFor же блокирует основной поток, пока запущенный не выполнится? Или я путаю. Я думаю ТС надо отследить что процесс запустился и работает, и продолжать какую-то свою логику а не блокироваться.. А вот тут я хз как это сделать платформенно-независимым образом Дык вопрос не в том как сделать. Вопрос в том что именно нужно отследить и для чего. Ну, и никто не мешает запускать дополнительные потоки чтобы мониторить состояние процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 22:12:29 |
|
||
|
Внешний процесс из Java
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, мне надо понять, запустился мой процесс или нет, работает он или нет. waitFor тут не подойдет, потому что, насколько я понял, он будет ждать пока я не завершу процесс сам, руками. А мне очень нужно для логики внутренней понять, запустился процесс или нет, и выдать соответствующую ошибку или не ошибку пользователю. Если Вы говорите, что можно через потоки сделать, не могли бы Вы, пожалуйста, показать пример небольшой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 22:15:35 |
|
||
|
Внешний процесс из Java
|
|||
|---|---|---|---|
|
#18+
Insane_1990Blazkowicz, мне надо понять, запустился мой процесс или нет, работает он или нет. waitFor тут не подойдет, потому что, насколько я понял, он будет ждать пока я не завершу процесс сам, руками. Процесс запускается в обоих случаях. Это важно, не игнорируйте. Процесс который вам нужен запускается и что-то делает. Вам важны результаты его работы. Вот и попробуйте сформулировать точный критерий чем процесс запустившийся и выполнивший задачу отличается от процесса запустившегося и не выполнившего свою задачу. Просто человеческим языком сформулируруйте максимально точный критерий. Insane_1990А мне очень нужно для логики внутренней понять, запустился процесс или нет, и выдать соответствующую ошибку или не ошибку пользователю. Если Вы говорите, что можно через потоки сделать, не могли бы Вы, пожалуйста, показать пример небольшой? Например так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 22:42:09 |
|
||
|
Внешний процесс из Java
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, исходя из Ваших слов, правильно ли я понял, что для компилятора пуск процесса произойдет в любом случае, не зависимо от того, запустится этот процесс физически или нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 22:57:23 |
|
||
|
Внешний процесс из Java
|
|||
|---|---|---|---|
|
#18+
Insane_1990, Делается следующим образом. 1) Стартуете процесс. Если он даже не смог запустится, будет брошен exception (например, если ОС не смогла понять, что запускать по "java") 2) Когда процесс застартует начинаете читать его output/error стримы. ВАЖНО! error стрим надо вычитывать в обязательном порядке, иначе можете зависнуть, когда его буффер заполнится. 3) Парсите выхлоп процесса и решаете, выполнил он необходимое действие или нет. Так работают очень многие фичи, в которых необходимо как-то взаимодействовать с процессом. Например, именно таким образом у вас в IDE отображает выхлоп ваших тестов или застартованного сервера, или thread dump, и т.д.. Ну и вообще, важно хорошо понимать, что есть всего два способа взаимодействия с процессом: 1) Стандартные input/output/error стримы. 2) Кастомное взаимодействие, основанное на сайд-эффектах работы процесса. Например, синхронизационные примитивы ОС (мьютексы, семафоры, и т.д.), какие-нибудь файлы, которые плодит этот процесс, shared memory / memory mapped files, и т.д. и т.д. Все, принципиально иных способов взаимодействия с процессом нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2013, 23:13:40 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38233538&tid=2129505]: |
0ms |
get settings: |
16ms |
get forum list: |
18ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
48ms |
get topic data: |
17ms |
get forum data: |
4ms |
get page messages: |
85ms |
get tp. blocked users: |
3ms |
| others: | 280ms |
| total: | 483ms |

| 0 / 0 |
