其他分享
首页 > 其他分享> > c – QProcess失效,无法再次启动

c – QProcess失效,无法再次启动

作者:互联网

我正在使用QProcess对象列表来跟踪需要以用户定义的间隔启动/停止的某些进程.

我能够启动和停止进程.但是当我使用以下方法(伪代码)停止进程时会出现问题:

process->start("PathToProcess","Some Arguments");
//Do some stuff.
process->terminate();

但是,如果我尝试在另一个时间再次启动该过程,我会收到错误:

QProcess::start:  Process is already running

我可以做一个ps -ef | grep processName并发现它确实已经死了,但是它处于一个已经不存在的状态,我认为这会阻止我再次启动它.

我需要做些什么来防止这种失效状态,或者删除失效方法,以便我可以重新启动我的过程而不重建?

解决方法:

找出导致错误的原因.

在qprocess_unix.cpp中,您将找到一个名为QProcessManager的类.本质上,这个类有信号处理程序,可以监视已经死亡的子进程.当一个孩子死亡时,QProcessManager会在管道上发送一条消息,让QProcess类知道它已终止/死亡.

在我的代码的一个不相关的部分,我已经设置了一些信号捕获语句,我用于各种目的.但是,这些信号捕获正在捕获我的SIGCHLD事件,因此QProcessManager从未被触发管道到它死亡的QProcess.

在我的情况下,我唯一的选择是要么手动监视孩子的死亡,要么删除我在其他代码段中执行的信号.

为了将来参考,如果你有这个问题,你可能最好做POSILL调用kill和终止,并手动检查这些调用的返回值.如果成功,执行:

process->setProcessState(ProcessState::NotRunning);//Specify the process is no longer running
waitpid(process->pid(),NULL,WNOHANG); //Clear the defunct process.

谢谢大家.

标签:qprocess,c,qt
来源: https://codeday.me/bug/20190723/1515324.html