[英]Qt handle process termination
我有一个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;
}
但是当我杀死子进程时,没有消息出现。 我究竟做错了什么?
我尝试了从QApplication
继承的示例,但是首先它给了我这个错误:
QObject::connect: No such slot QApplication::daemonDied(QProcess::ProcessState)
QObject::connect: No such slot QApplication::daemonDied(int)
然后,我在类定义中添加了Q_OBJECT
,它连接了信号/插槽,但是当我终止该进程时,出现了以下错误:
ICE default IO error handler doing an exit(), pid = 27773, errno = 4
但是,当我将类更改为继承自QObject
而不是QApplication
它确实起作用了。 因此,主要有:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
CaptureApp captureApp(argc,argv);
return a.exec();
}
正如jbm所评论的那样,某些进程保持连接,而另一些则没有。 我尝试了第一个gedit
,开始后它立即收到一个信号,指示进程已完成。 但是使用vim
确实可以继续运行,而且我可以在外部将其杀死。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.