У меня есть приложение Qt, которое запускает другое приложение. Я хочу получить сигнал, если дочернее приложение будет завершено извне.Окончание процесса обработки Qt
Код:
CaptureApp::CaptureApp(int& argc, char** argv): QApplication(argc, argv)
{
launchDaemon();
}
void CaptureApp::launchDaemon()
{
QString command = "daemon";
QStringList arguments;
arguments << "somearg";
process = new QProcess(this);
process->start(command, arguments);
connect(process,SIGNAL(stateChanged(QProcess::ProcessState)),this,SLOT(daemonDied(QProcess::ProcessState)));
connect(process,SIGNAL(finished(int)),this,SLOT(daemonDied(int)));
}
void CaptureApp::daemonDied(QProcess::ProcessState state)
{
std::cout << "DAEMON DIED" << std::endl;
}
void CaptureApp::daemonDied(int code)
{
std::cout << "DAEMON DIED" << std::endl;
}
Но сообщение не появляется, когда я убить дочерний процесс. Что я делаю не так?
Что такое 'spaceNavProcess'? Почему бы вам не подключить «процесс»? Я также сомневаюсь, что убийство процесса вызовет любой сигнал. – vahancho
@vahancho Извините, это была ошибка при копировании кода здесь. Первоначально имена одобрены – Lecko
Является ли демон, который вы запускаете настоящего, хорошо написанного демона? Если это так, он будет отсоединен от своего родителя. Вы можете проверить, что с помощью 'pstree' или' ps aux', чтобы увидеть, стал ли этот демон дочерним элементом PID 1 ('init' или' systemd' или что-то еще). Замечание: вот почему Qt как 'QProcess :: startDetached()' специально для запуска демонов (или имитировать хорошо написанный демон, который в любом случае будет отсоединен от его родителя). – jbm