QProcess和Shell:在进程仍在运行时被销毁

8

我想在Qt中启动一个shell脚本。

QProcess process;
process.start(commandLine, QStringList() << confFile);
process.waitForFinished();

if(process.exitCode()!=0)
{
    qDebug () << " Error " << process.exitCode() << process.readAllStrandardError();
}
else
{
    qDebug () << " Ok " << process.readAllStrandardOutput() << process.readAllStrandardError();
}

结果是:

好的:结果.... " "" QProcess:进程仍在运行时被销毁。

每次都不会出现此消息。

问题是什么?


waitForFinished() 方法有一个 30 秒的超时时间,并返回等待是否超时。因此,请检查 waitForFinished() 的返回值以确定进程是否实际退出。 - Frank Osterfeld
@FrankOsterfeld那是一个回答。如果你真的想等待进程完成,我可以添加使用waitForFinished(-1) - UmNyobe
你打错了readAllStandard。它被写成了Strandard,这不是问题,但如果有人编译的话会很困惑。 - questioner
2个回答

21

process.waitForFinished(); 默认的30秒超时已到达。应使用process.waitForFinished(-1);,这样可以确保您等待进程完成所需要的时间,而不会有任何超时。


3
请注意,您在本地范围内创建了QProcess。这意味着当您退出该范围时,对象将被删除。在析构函数中,QProcess进程会终止。当进程在析构函数中终止时,消息“已销毁”同时“进程仍在运行”。
为解决此问题,应在进程已终止时调用QProcess析构函数。
如果在您的示例中使用QProcess :: waitForFinished(-1),则会发生这种情况,但这将阻止应用程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接