|
|
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
Задача: Производим запуск нескольких процессов.. каждый из них может либо выполняться какое-то небольшое время(1, 10, 60 секунд), либо работать в качестве демона(30 минут).. У процессов получаю InputStream и ErrorInputStream.. Хотелось бы выводить это добро в один поток. Как всё "синхронизировать"? То есть как произвести "Перенаправление потоков вывода нескольких процессов в один поток." ? Сейчас есть код(метод), который запускает один процесс: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2014, 10:37 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
feomatr, Вот тут посмотрите, если я вас правильно понял: http://stackoverflow.com/questions/14165517/processbuilder-forwarding-stdout-and-stderr-of-started-processes-without-blocki ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2014, 13:45 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
feomatr , Единственное возможное решение - стартовать отдельный поток для каждого процесса, где читать из out/err стримов этого процесса. inheritIO - в общем случае вариант нерабочий, так как он будет загаживать стримы вашего процесса, хотите вы этого или нет. Как стартовать отдельный поток для процесса - дело ваше. Можно руками, это пару десятков строк кода. Можно какую-нибудь утилитарную библиотеку подключить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.11.2014, 14:53 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
DEVcoach feomatr , Единственное возможное решение - стартовать отдельный поток для каждого процесса, где читать из out/err стримов этого процесса. inheritIO - в общем случае вариант нерабочий, так как он будет загаживать стримы вашего процесса, хотите вы этого или нет. Как стартовать отдельный поток для процесса - дело ваше. Можно руками, это пару десятков строк кода. Можно какую-нибудь утилитарную библиотеку подключить. Вроде уже не обязательно потоки плодить? http://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html#redirect-input ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 09:37 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
А если взять очередь - тогда у вас появиться много писателей - подписчиков ..и один читатель , который будет эту очередь разбирать ...по мере поступления данных ? такой вариант подойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 12:58 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
Может свой класс от какого нибудь InputStream породить и его методы тупо засинхронизировать? И перед один и тот же thread-safe экземпляр во все процессы? p.s. возможно чушь сморозил, не проверял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 18:23 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
DEVcoachЕдинственное возможное решение - стартовать отдельный поток для каждого процесса, где читать из out/err стримов этого процесса.+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.12.2014, 19:23 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
В принципе, мне подходит создание отдельного треда на потоки процесса. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Ещё, потоки будут маркироваться, "Процесс Х, Еррор: ", а не просто сваливаться в одну кучу. Потому, вместо Код: java 1. , осталось сделать структуру и\или методы доступа к ней для записи данных Тредами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 00:26 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
feomatr, Java Doc не пробовали читать? Redirect Error в Output доступен уже с Java 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 09:19 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Сейчас внимательно перечитал ссылку, приведенную вами ранее. Из прочитанного понял, что : при редиректе error в output, нет возможности написать "это ОШИБКИ из процесса PROCESS ". То есть, Не могу маркировать, стримы названиями процесса! Что-то вроде: запуск процессов, как последовательно, так и параллельно, чтобы output && error выводились в одну "консоль" с пометкой: процесс Х, цвет отображения COLOR. Консоль, получив как стримы, так и сопровождающую информацию отобразит разноцветный текст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.12.2014, 23:08 |
|
||
|
Перенаправление потоков вывода нескольких процессов в один поток.
|
|||
|---|---|---|---|
|
#18+
feomatrСейчас внимательно перечитал ссылку, приведенную вами ранее. Похоже что не внимательно. Вы привели код, в котором отдельно читаете output и error. Он не нужен. Это не решает вопроса с процессами. Это решает вопрос в том что отдельно output и error обрабатывать не обязательно. Можно всё слить в output и читать только его. А процессы это отдельный вопрос. Я бы не занимался ерундой и сливал бы всё в разные файлы. А файлы потом уже можно комбинировать как душе угодно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2014, 09:33 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38820681&tid=2126153]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
157ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 427ms |

| 0 / 0 |
