Russian Qt Forum
Октябрь 01, 2024, 02:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по QProcess  (Прочитано 3846 раз)
merke
Гость
« : Декабрь 01, 2011, 14:39 »

Всем привет.

Есть прога, которая запускает дочерние процессы. Родительская прога консольная, если в консоли нажать ctrl+c, основная программа завершается, а вот дочерние процессы, запущенные ею остаются висеть в процеcсах.

Платформа: Винда XP

Вот код:

Код
C++ (Qt)
#include <QtCore/QCoreApplication>
#include <QProcess>
#include <QFile>
#include <QSharedPointer>
 
int main(int argc, char *argv[])
{
   QCoreApplication a(argc, argv);
 
   QProcess *process = new QProcess;
 
   process->start("C:\\dmaster.exe");
 
   return a.exec();
}
 

Записан
ddrtn
Гость
« Ответ #1 : Декабрь 01, 2011, 14:42 »

Код:
connect(qApp, SIGNAL(aboutQuit()), proc, SLOT(kill()));
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Декабрь 01, 2011, 14:43 »

А желаемое поведение какое?
Записан
merke
Гость
« Ответ #3 : Декабрь 01, 2011, 14:51 »

Надо чтобы все дочерние процессы тоже выгружались.

Кстати вот это не срабатывает:

QObject::connect(qApp, SIGNAL(aboutToQuit()), process, SLOT(kill()));
Записан
ddrtn
Гость
« Ответ #4 : Декабрь 01, 2011, 14:53 »

можно попробывать вместо kill terminate
Записан
merke
Гость
« Ответ #5 : Декабрь 01, 2011, 14:55 »

Попробовал, не получается. Если бы это было гуишное приложение, тогда без проблем, а вот в консольном такие вот проблемы(
Записан
merke
Гость
« Ответ #6 : Декабрь 01, 2011, 15:40 »

Уже думаю писать чтоли свой сборщик "мусора"...
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Декабрь 01, 2011, 18:49 »

Если запускаемые приложения Ваши, то можно вставить в них проверку "жив ли запустивший" (напр 1 раз в секунду) и если нет - вываливаться (exit)

Если из "запустившего", то мочить с помощью ::TerminateProcess (WinAPI)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.132 секунд. Запросов: 23.