|
|
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
Задача такова есть два похожих *.sh файла, нужно их запустить одновременно(потоки), сграбить аутпут с каждого скрипта. Погуглил, создал два потока, запускаются одновременно(проверил через ps aux). Но при попытке записать вывод - получаю результат только из первого шелла. Подскажите плиз, где моя ошибка Делаю так: public static void main(String[] args) throws InterruptedException { Thread th1 = new MyThread("test1.sh"); Thread th2 = new MyThread("test2.sh"); th1.start(); th2.start(); } === public MyThread(String str) { super(str); } public void run() { try { Process proc = Runtime.getRuntime().exec("/home/java/" + getName()); BufferedReader input = new BufferedReader(new InputStreamReader(proc.getInputStream())); String line = new String(); while ((line = input.readLine()) != null) { System.out.println("pr:" + getName()+ line); } input.close(); System.out.println("Proc exit value: " + proc.exitValue()); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2011, 01:38:58 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
Общие рекоммендации: 1) Вкурить статью http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1 2) Не использовать имя потока в качестве имени исполняемого файла По делу: 1) Вместо Runtime использовать ProcessBuilder 2) Редиректить ErrorStream Как вы понимаете, что аутпута со второго скрипта нет? Они же у вас пишутся в консоль вперемешку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2011, 09:08:26 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
svenomОбщие рекоммендации: 1) Вкурить статью http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1 2) Не использовать имя потока в качестве имени исполняемого файла Посмотрю. По делу: 1) Вместо Runtime использовать ProcessBuilder 2) Редиректить ErrorStream Спасибо, буду пробовать. Как вы понимаете, что аутпута со второго скрипта нет? Они же у вас пишутся в консоль вперемешку. Я знаю то что эти тесты должны выводить. Есть результат только первого. Хотя второй тоже отрабатывает успешно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2011, 11:01:42 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
epanЕсть результат только первого. Хотя второй тоже отрабатывает успешно.Запустите сначала только первый потокЮ посмотрите на результат. Потом только второй поток, снова посмотрите на результат. Потом запустите их вместе и опять посмотрите на результат. Мне кажется, тут могут быть следующие варианты: 1) Второй процесс не выдает вообще ничего, просто тихо исполняется 2) Второй процесс пишет в ErrorStream, а не в OutputStream 3) И первый и второй процессы все пишут нормально, просто вы их запускаете в параллель, результаты перемешиваются и вам кажется, что отработал только один ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.12.2011, 11:09:48 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
1) Второй процесс не выдает вообще ничего, просто тихо исполняется Так и есть. 2) Второй процесс пишет в ErrorStream, а не в OutputStream Тогда б файлики результата не создались, и проверка ps aux | grep ... не показывала б оба скрипта одновременно. 3) И первый и второй процессы все пишут нормально, просто вы их запускаете в параллель, результаты перемешиваются и вам кажется, что отработал только один Не перемешивается, так как я точно знаю вывод для каждого из них. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2011, 02:32:08 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
То есть проблема решена? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2011, 09:04:46 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#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. Код: 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. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2012, 15:13:33 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
Все хорошо оказалось в первом приближении. Если шелл выдает около 40к текста - успешно пишется в файл, а если более файл пустой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2012, 14:49:00 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
Дело не в файле. Дело в моем шелл скрипте. Если я его руками запускаю - отрабатывает, выводит на экран, завершает корректно свою работу. Если через программку (включил вывод на консоль) - выводит на экран (200к) все успешно и подвисает. Пробовал сделать в шелле команду "cat filename" - без проблем обрабатывает большие файлы. Так что всем спасибо, буду разбираться со своим шеллом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 11:27:19 |
|
||
|
Потоки. Отслеживание их выполнения.
|
|||
|---|---|---|---|
|
#18+
epanДело не в файле. Дело в моем шелл скрипте. Если я его руками запускаю - отрабатывает, выводит на экран, завершает корректно свою работу. Если через программку (включил вывод на консоль) - выводит на экран (200к) все успешно и подвисает. Пробовал сделать в шелле команду "cat filename" - без проблем обрабатывает большие файлы. Так что всем спасибо, буду разбираться со своим шеллом.Вы точно из обоих стримов информацию вычитываете - и из основного и из ErrorStream? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 11:33:04 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37577009&tid=2132787]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
50ms |
get topic data: |
16ms |
get forum data: |
4ms |
get page messages: |
63ms |
get tp. blocked users: |
3ms |
| others: | 346ms |
| total: | 521ms |

| 0 / 0 |
