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