Qt: Не удалось найти pid приложения при запуске из двоичного файла с использованием скрипта

У меня есть цель получить PID приложения, когда последний запускается.
Я написал простые вызовы функций pgrep команда:

QString Scriptlauncher::getAppProcessId() {
QProcess p;
QString programme("pgrep");
QStringList args = QStringList() << "app_name";
p.start(programme, args);
p.waitForReadyRead();
QByteArray rdata = p.readAllStandardOutput();
qDebug() << "------------- script output rawdata is:" << rdata;
if (!rdata.isEmpty()) {
QString pid(rdata);
pid = pid.left(pid.length() -1); // cut '\n' symbol
qWarning() << "APPLICATION pid is" << pid;
return pid;
}
qWarning() << "failed to find out PID";
return ("-1");
}

Когда я запускаю программу прямо из Qt или с помощью простого скрипта (назовите его execute.sh; он экспортирует все необходимые разделяемые библиотеки, а затем запускает двоичный файл приложения, — чтобы запустить приложение из терминала), кодовый блок сверху возвращает правильное значение:

user@host:/standalone_package/ execute.sh
------------- script output rawdata is: "21094\n"APPLICATION pid is "21094"

Но когда я запускаю execute.sh из команды профилировщика кучи valgrind, функция возвращает:

user@host:/standalone_package/ valgrind --tool=massif --trace-children=yes ./execute.sh
------------- script output rawdata is: ""failed to find out PID

0

Решение

Благодаря Hayt за ссылки! Я нашел решение!

вторая ссылка предлагается требует экземпляра QProcess объект. Я понятия не имею, как это получить.

Но используя первая ссылка, Я получаю код, работающий как непосредственно из приложения и под valgrind:

QString Scriptlauncher::getAppProcessId() {
long pid = (long)getpid();
qDebug ("------------- pid is %d", pid);
QString pidstr = QString::number(pid);
return pidstr;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]