QProcess.start 不返回退出状态或退出代码
Posted
技术标签:
【中文标题】QProcess.start 不返回退出状态或退出代码【英文标题】:QProcess.start doesn't return exit status nor exit code 【发布时间】: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()
似乎都无法正常工作。
有人知道为什么这些功能不起作用吗? 我在滥用它们吗?
【问题讨论】:
【参考方案1】:输出是正确的。 “sleep”从未崩溃,但它会验证输入,如果输入不充分,则打印一条错误消息,除此之外,它返回一个退出代码,指示程序是否正确使用,即返回一个 0或其他数字。
当程序不是为处理某些任务而设计时会发生崩溃,例如访问未保留的内存。
因此,如果您想知道 sleep 是否按预期运行,则必须同时评估这两种情况:
if(process.exitStatus() == QProcess::NormalExit && process.exitCode() == 0)
qCritical() << "SUCCESS";
else
qCritical() << "ERROR";
【讨论】:
以上是关于QProcess.start 不返回退出状态或退出代码的主要内容,如果未能解决你的问题,请参考以下文章
如果代码不为0,则无法获取erlang escript退出代码