Qt的QProcess中获取内存信息
问题描述:
我试图使用QProcess中获得的记忆,我使用的是RedHat 7.3,如果我打开一个终端输入免费,这给了我:Qt的QProcess中获取内存信息
total used free shared buff/cache available
Mem: 7865728 1602988 3984928 297040 2277812 5552268
Swap: 8126460 0 8126460
我试着产生相同的QT:
QProcess p;
p.start("free");
p.waitForFinished();
QString strMemory = p.readAllStandardOutput();
qDebug() << strMemory;
p.close();
然而,这并不工作,我的应用程序挂起,我也试着:
sh free
没有好转。
答
多玩弄我发现启动子进程外工作的IDE而不是从内它之后。
答
尝试这样:
const QString command { "free" };
QProcess p {};
p.start(command);
if (!p.waitForFinished(-1))
{
qWarning() << "Error:" << p.readAllStandardError();
return;
}
const auto& output = p.readAllStandardOutput();
qDebug() << "Output:" << output;
答
您正在使用同步API错误。尝试非同步之一:
QProcess p;
QString strMemory;
QObject::connect(&p,&QProcess::readyReadStandardOutput,[&strMemory,&p]()->void{strMemory += QString::fromLatin1(p.readAllStandardOutput());});
QObject::connect(&p,&QProcess::readyReadStandardError,[&strMemory,&p]()->void{strMemory += QString::fromLatin1(p.readAllStandardError());});
QObject::connect(&p,static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),[&strMemory]()->void{qDebug() << strMemory;});
p.start("free");
你尝试'在/ usr/bin中/ free' – drescherjm
只是去尝试,起动过程中,当不幸的是相同的,应用程序挂起。 – SPlatten
您可能还想对'waitForFinished()'进行时间限制并检查进程的状态。 – drescherjm