|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Отслеживание состояния запущенного процесса |
|
Java - Отслеживание состояния запущенного процесса
|
Пользователь Сообщения: 133 |
Профиль | Сайт | Отправить PM | Цитировать Добрый день! Пишу программу на Java. Которая должна вызывать другую программу из своего кода. Далее моя программка должна дождаться когда запущенный ею процесс завершится. Проблема заключается в том, что стандартной функцией waitFor() отследить завершение процесса не удаётся.
Подскажите пожалуйста. Можно ли средствами Java отследить завершение процесса (написать диспетчер задач)? |
|
------- Отправлено: 11:33, 27-09-2007 |
Пользователь Сообщения: 133
|
Профиль | Сайт | Отправить PM | Цитировать Вот так:
class Mon { public Mon() { } public synchronized void Run(String cmd, int i) { try { Runtime runtime = Runtime.getRuntime(); Process p = null; String nStream = " Stream (" + i + ") Run: [" + cmd + "]..."; System.out.print(nStream); p = runtime.exec(cmd); if (p.waitFor() == 0) { System.out.print(" ok"); } else System.out.print(" error"); } catch (Exception e) { e.printStackTrace(); } } } |
------- Отправлено: 09:43, 01-10-2007 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Првильно, если вы вызываете функцию которая объявлена как synchronized, то пока она не выполнится второй раз ее вызвать нельзя.
|
------- Отправлено: 12:59, 01-10-2007 | #12 |
Пользователь Сообщения: 133
|
Профиль | Сайт | Отправить PM | Цитировать BlackEric, всё так и задумано. Вопрос в том, что когда я вызываю эту функцию из потока, она в свою очередь вызывает внешний модуль. Функция waitFor() заставляет приложение ждать пока внешний модуль выполнится. Но, мне нужно, что бы эта функция заставляла ждать только тот поток который в данный момент получил доступ к public synchronized void Run(String cmd, int i).
Иначе говоря, мне нужно организовать очередь в которую будут попадать потоки желающие вызвать внешний модуль. Нельзя, чтобы его вызывали сразу два потока. |
------- Отправлено: 14:45, 01-10-2007 | #13 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать http://java.sun.com/developer/techni...ing/#Deadlocks
Здесь описано как отлавливать блокировки. Правда для Java 6. Есть ли такое для 1.4 не знаю |
------- Отправлено: 15:50, 01-10-2007 | #14 |
Пользователь Сообщения: 133
|
Профиль | Сайт | Отправить PM | Цитировать Цитата BlackEric:
|
|
------- Отправлено: 18:38, 01-10-2007 | #15 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать В общем как я понял вам нужно для каждого потока для ожидания вызывать метод wait(), а потом когда один поток отработал запускать методом notify() следующий
|
------- Отправлено: 13:20, 02-10-2007 | #16 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Помогите с написанием bat файла для проверки запущенного процесса. | Stranger404 | Скриптовые языки администрирования Windows | 17 | 17-08-2020 22:50 | |
Проверка запущенного процесса | Anarasius | AutoIt | 2 | 25-06-2014 11:39 | |
.NET - Получение PID процесса, запущенного из программы | Delirium | Программирование и базы данных | 2 | 07-12-2009 02:17 | |
Delphi - отслеживание процесса. | mikola1983 | Программирование и базы данных | 4 | 02-10-2007 17:51 | |
А можно для уже запущенного процесса сменить user-a ? | ukms | Программирование и базы данных | 6 | 23-10-2002 13:51 |
|