【发布时间】:2021-08-16 18:14:02
【问题描述】:
我目前正在使用 QProcess 从 C++ 应用程序运行 Linux 命令,但在使用 QProcess::start 函数时出现了奇怪的行为。
这个最小的例子说明即使进程失败,进程退出状态被QProcess::exitStatus()认为是成功的,即使QProcess::exitCode()返回了好的退出代码。
int main(int argc, char *argv[])
{
QProcess process;
process.start("sleep a");
process.waitForFinished();
process.close();
if(QProcess::NormalExit == process.exitStatus())
{
qCritical() << "SUCCESS : " + QString::number(process.exitCode());
}
else
{
qCritical() << "ERROR : " + QString::number(process.exitCode());
}
}
输出
$ ./test
"SUCCESS : 1"
我发现使用Process::execute 代替Process::start 并没有改变Process::exitStatus 的任何内容,更糟糕的是Process::exitCode 不再返回1。
int main(int argc, char *argv[])
{
QProcess process;
qCritical() << process.execute("sleep a");
if(QProcess::NormalExit == process.exitStatus())
{
qCritical() << "SUCCESS : " + QString::number(process.exitCode());
}
else
{
qCritical() << "ERROR : " + QString::number(process.exitCode());
}
}
输出
$ ./test
/bin/sleep: invalid time interval ‘a’
Try '/bin/sleep --help' for more information.
1
"SUCCESS : 0"
Process::exitStatus() 和 Process::exitCode() 似乎都无法正常工作。
有人知道为什么这些功能不起作用吗? 我在滥用它们吗?
【问题讨论】: