ProcessInfo: Don't use QtcProcess::readDataFromProcess()

There is no big benefit of calling readDataFromProcess()
when the last argument is false. Simplify
getLocalProcessDataUsingPs() method.

Change-Id: I3839f93574945ef2bb6d147415cffc61d95afda0
Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
Jarek Kobus
2022-07-05 17:40:50 +02:00
parent 5be5f7a331
commit 37ac00e498

View File

@@ -119,24 +119,20 @@ static QList<ProcessInfo> getLocalProcessesUsingProc()
// Determine UNIX processes by running ps
static QMap<qint64, QString> getLocalProcessDataUsingPs(const QString &column)
{
QMap<qint64, QString> result;
Utils::QtcProcess psProcess;
psProcess.setCommand({"ps", {"-e", "-o", "pid," + column}});
psProcess.start();
if (psProcess.waitForStarted()) {
QByteArray output;
if (psProcess.readDataFromProcess(30, &output, nullptr, false)) {
QtcProcess process;
process.setCommand({"ps", {"-e", "-o", "pid," + column}});
process.start();
if (!process.waitForFinished())
return {};
// Split "457 /Users/foo.app arg1 arg2"
const QStringList lines = QString::fromLocal8Bit(output).split(QLatin1Char('\n'));
const int lineCount = lines.size();
const QChar blank = QLatin1Char(' ');
for (int l = 1; l < lineCount; l++) { // Skip header
const QString line = lines.at(l).trimmed();
const int pidSep = line.indexOf(blank);
const QStringList lines = process.stdOut().split(QLatin1Char('\n'));
QMap<qint64, QString> result;
for (int i = 1; i < lines.size(); ++i) { // Skip header
const QString line = lines.at(i).trimmed();
const int pidSep = line.indexOf(QChar::Space);
const qint64 pid = line.left(pidSep).toLongLong();
result[pid] = line.mid(pidSep + 1);
}
}
result.insert(pid, line.mid(pidSep + 1));
}
return result;
}