Qt QProcess和shell:进程仍在运行时已销毁

Qt QProcess和shell:进程仍在运行时已销毁,qt,shell,qt-creator,sh,qprocess,Qt,Shell,Qt Creator,Sh,Qprocess,我想用Qt启动一个shell脚本 QProcess process; process.start(commandLine, QStringList() << confFile); process.waitForFinished(); if(process.exitCode()!=0) { qDebug () << " Error " << process.exitCode() << process.readAllStrandardErro

我想用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过程;

process.start(命令行,QStringList()
process.waitForFinished();
正在达到默认的30秒超时。使用
process.waitForFinished(-1)改为;
。这将确保您在无超时的情况下等待进程完成所需的时间。

注意,您在本地作用域中创建了QProcess。这意味着当您退出作用域时,对象将被删除。在析构函数中,QProcess进程终止。当“进程仍在运行”时,消息“已销毁”当进程在析构函数中终止时

为了解决这个问题,应该在进程已经终止时调用QProcess析构函数


如果将QProcess::waitForFinished(-1)放入示例中,则会出现这种情况,但这将阻止您的应用程序。

waitForFinished()超时30秒,并返回等待是否超时。因此,请检查waitForFinished()返回值以检查进程是否真的退出。@Frankosterfield这是答案。如果您真的想等待进程完成,我可以添加use
waitForFinished(-1)
。您没有键入readAllStandard。它是以Strandard编写的,这不是问题,但如果有人要编译,会让人困惑。