c++ - QProcess.start 不返回退出状态或退出代码
问题描述
我目前正在使用从 C++ 应用程序运行 Linux 命令,并且在使用函数QProcess
时我有一个奇怪的行为。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"
我发现 usingProcess::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()
无法正常工作。
有谁知道为什么这些功能不起作用?我在滥用它们吗?
解决方案
输出是正确的。“sleep”从未崩溃,但它会验证输入,如果输入不充分,则打印一条错误消息,除此之外,它返回一个退出代码,指示程序是否正确使用,即返回一个 0或另一个数字,分别。
当程序不是为处理某些任务(例如访问未保留的内存)而设计时,就会发生崩溃。
因此,如果您想知道 sleep 是否按预期运行,则必须同时评估两种情况:
if(process.exitStatus() == QProcess::NormalExit && process.exitCode() == 0)
{
qCritical() << "SUCCESS";
}
else
{
qCritical() << "ERROR";
}
推荐阅读
- angular - Angular 6中的条形图
- .net - MVC 连接表显示
- c# - Xamarin Forms ListView 滚动位置 - MVVM
- nwjs - 在 NW.js 构建中分发 node_modules 文件夹的最佳方式?
- .net - 不显示动态添加的控件
- windows-subsystem-for-linux - wsl ubuntu .bashrc 停止运行
- python - 使用 easywebdav 进行下载会导致文件损坏
- php - ajax 请求的 CSRF 保护
- python-3.x - 从列表中删除排列
- angular - Angular 6 - 滚动上的动画 Div