Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Отслеживание состояния запущенного процесса

Ответить
Настройки темы
Java - Отслеживание состояния запущенного процесса

Аватара для EvgeniyQQQ

Пользователь


Сообщения: 133
Благодарности: 21

Профиль | Сайт | Отправить PM | Цитировать


Добрый день! Пишу программу на Java. Которая должна вызывать другую программу из своего кода. Далее моя программка должна дождаться когда запущенный ею процесс завершится. Проблема заключается в том, что стандартной функцией waitFor() отследить завершение процесса не удаётся.
Подскажите пожалуйста. Можно ли средствами Java отследить завершение процесса (написать диспетчер задач)?

Код: Выделить весь код
   Runtime runtime = Runtime.getRuntime();
   Process p = null;
   String cmd = <команда для запуска приложения>;
   p = runtime.exec(cmd);
   p.waitFor(); //заставляет приложение ждать (приостановить своё выполнение) пока не выполнится запущенный процесс

-------
"Не соглашайся ни на что, кроме совершенства!" - Анонимный автор.
"Совершенство достигается только к моменту полного краха." - К.Н.Паркинсон.


Отправлено: 11:33, 27-09-2007

 

Аватара для EvgeniyQQQ

Пользователь


Сообщения: 133
Благодарности: 21

Профиль | Сайт | Отправить 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
Благодарности: 63

Профиль | Отправить PM | Цитировать


Првильно, если вы вызываете функцию которая объявлена как synchronized, то пока она не выполнится второй раз ее вызвать нельзя.

-------
black-eric.livejournal.com


Отправлено: 12:59, 01-10-2007 | #12


Аватара для EvgeniyQQQ

Пользователь


Сообщения: 133
Благодарности: 21

Профиль | Сайт | Отправить PM | Цитировать


BlackEric, всё так и задумано. Вопрос в том, что когда я вызываю эту функцию из потока, она в свою очередь вызывает внешний модуль. Функция waitFor() заставляет приложение ждать пока внешний модуль выполнится. Но, мне нужно, что бы эта функция заставляла ждать только тот поток который в данный момент получил доступ к public synchronized void Run(String cmd, int i).
Иначе говоря, мне нужно организовать очередь в которую будут попадать потоки желающие вызвать внешний модуль. Нельзя, чтобы его вызывали сразу два потока.

-------
"Не соглашайся ни на что, кроме совершенства!" - Анонимный автор.
"Совершенство достигается только к моменту полного краха." - К.Н.Паркинсон.


Отправлено: 14:45, 01-10-2007 | #13


Старожил


Сообщения: 435
Благодарности: 63

Профиль | Отправить PM | Цитировать


http://java.sun.com/developer/techni...ing/#Deadlocks
Здесь описано как отлавливать блокировки. Правда для Java 6. Есть ли такое для 1.4 не знаю

-------
black-eric.livejournal.com

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:50, 01-10-2007 | #14


Аватара для EvgeniyQQQ

Пользователь


Сообщения: 133
Благодарности: 21

Профиль | Сайт | Отправить PM | Цитировать


Цитата BlackEric:
http://java.sun.com/developer/techni...ing/#Deadlocks »
Статья интересная... но по моему мнению не чем мне помочь не может.

-------
"Не соглашайся ни на что, кроме совершенства!" - Анонимный автор.
"Совершенство достигается только к моменту полного краха." - К.Н.Паркинсон.


Отправлено: 18:38, 01-10-2007 | #15


Старожил


Сообщения: 435
Благодарности: 63

Профиль | Отправить PM | Цитировать


В общем как я понял вам нужно для каждого потока для ожидания вызывать метод wait(), а потом когда один поток отработал запускать методом notify() следующий

-------
black-eric.livejournal.com


Отправлено: 13:20, 02-10-2007 | #16



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - Отслеживание состояния запущенного процесса

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход