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

Компьютерный форум 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

 

Старожил


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

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


Код: Выделить весь код
public boolean runProgramAndWait(String runCommand){
            Process process;
            java.lang.Runtime runtime;
            try{
                runtime = Runtime.getRuntime();
                process = runtime.exec(runCommand);
                process.waitFor();
                return true;
            }catch (InterruptedException e){
                return false;
            }
            catch (Exception e){
                 return false;
            }
        }
Вот так должно работать.

-------
photoua.narod.ru

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

Отправлено: 13:54, 27-09-2007 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для EvgeniyQQQ

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


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

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


BlackEric, я так и сделал, но не работает. Возможно, то приложение, которое я вызываю, завершившись, оставляет после себя что то, что свидетельствует для waitFor() о его присутствии.

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


Отправлено: 14:23, 27-09-2007 | #3


Старожил


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

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


Т.е. у вас Java приложение после вызова waitFor() виснет?
Приложение которое вы вызываете завершается корректно?
Если корректно, то waitFor() должен вернуть 0. Что он возвращает?
ОС какая и версия Java?

<команда для запуска приложения>; - что у вас здесь прописано?
Вы с другим приложением пробовали?

-------
photoua.narod.ru


Отправлено: 16:23, 27-09-2007 | #4


Аватара для EvgeniyQQQ

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


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

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


Цитата BlackEric:
Т.е. у вас Java приложение после вызова waitFor() виснет? »
да
Цитата BlackEric:
Приложение которое вы вызываете завершается корректно? »
да
Цитата BlackEric:
Если корректно, то waitFor() должен вернуть 0. Что он возвращает? »
Программа как раз на этой функции и весит.
Цитата BlackEric:
ОС какая и версия Java? »
ОС Windows XP Pro. Java SDK 1.4, более позднюю версию использовать не желательно.
Цитата BlackEric:
<команда для запуска приложения>; - что у вас здесь прописано? »
Путь к вызываемой программе, через пробелы параметры.
Цитата BlackEric:
Вы с другим приложением пробовали? »
Нет. Мысль хорошая.
Приложение которое я вызываю написано на Delphi.

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


Отправлено: 16:47, 27-09-2007 | #5


Старожил


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

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


Я бы на вашем месте отлаживал это на каком-нибудь Hello Word. T.e. добился корректной работы в минимальном приложении типа
Код: Выделить весь код
begin
writeln('vasja');
end.
, а потом запускал работу с вашей прогой.

-------
photoua.narod.ru


Отправлено: 16:56, 27-09-2007 | #6


Аватара для EvgeniyQQQ

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


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

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


BlackEric, с Notepad всё работает.

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


Отправлено: 17:40, 27-09-2007 | #7


Старожил


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

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


Вывод: Java - код рабочий.
Что делает дельфовая прога? Она консольная или с GUI?
Нет ли утечек памяти, не закрытых файлов, коннектов к БД и прочая?
Народ говорит что может быть проблема если интерфейс со скинами....

-------
photoua.narod.ru


Отправлено: 17:45, 27-09-2007 | #8


Аватара для EvgeniyQQQ

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


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

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


BlackEric, спасибо. Вроде всё заработало сам не понимаю почему. Хотя ПК слабенькие. Я дождался когда процесс исчезнет в диспетчере задач, но возможно нужно было ещё подождать, что бы процесс выгрузился полностью (может он еще не успел это сделать).

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

BlackEric, прога GUI. Она выполняет некоторую интеграцию.
Конекты с БД есть. Вот как проверить есть ли утечки памяти не знаю.
Цитата BlackEric:
Народ говорит что может быть проблема если интерфейс со скинами.... »
Поясните пожалуйста.

Я обрадовался, что всё заработало, на самом деле получается через раз.

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


Отправлено: 17:56, 27-09-2007 | #9


Старожил


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

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


Цитата EvgeniyQQQ:
Цитата BlackEric:
Народ говорит что может быть проблема если интерфейс со скинами.... »
Поясните пожалуйста. »
Опыт он сын ошибок трудных...

Как проверять наличие утечек памяти в Delphi посмотрите в гугле.

Как объявлена функция которая блокируется и класс в котором она находится?

-------
photoua.narod.ru


Последний раз редактировалось BlackEric, 27-09-2007 в 18:22. Причина: Уточнение


Отправлено: 18:18, 27-09-2007 | #10



Компьютерный форум 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




 
Переход