Qt:使用脚本从二进制 运行 时无法找到应用程序 pid
Qt: Failed to find out application pid when run from binary using script
我的目标是获取应用程序的 PID,当后者 运行s 时。
我写了一个简单的函数调用 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
;它导出所有需要的共享库,然后 运行 应用程序二进制文件,-到 运行 来自终端的应用程序),上面的代码块 returns 正确值:
user@host:/standalone_package/ execute.sh
------------- script output rawdata is: "21094\n"
APPLICATION pid is "21094"
但是当我从 valgrind 堆分析器命令 运行 execute.sh 时,函数 returns:
user@host:/standalone_package/ valgrind --tool=massif --trace-children=yes ./execute.sh
------------- script output rawdata is: ""
failed to find out PID
感谢 Hayt 提供链接!我找到了解决方案!
所提供的second link需要QProcess
对象的实例。我不知道如何获得它。
但是使用 first link,我可以直接从应用程序和 valgrind
:
下获取代码
QString Scriptlauncher::getAppProcessId() {
long pid = (long)getpid();
qDebug ("------------- pid is %d", pid);
QString pidstr = QString::number(pid);
return pidstr;
}
我的目标是获取应用程序的 PID,当后者 运行s 时。
我写了一个简单的函数调用 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
;它导出所有需要的共享库,然后 运行 应用程序二进制文件,-到 运行 来自终端的应用程序),上面的代码块 returns 正确值:
user@host:/standalone_package/ execute.sh
------------- script output rawdata is: "21094\n"
APPLICATION pid is "21094"
但是当我从 valgrind 堆分析器命令 运行 execute.sh 时,函数 returns:
user@host:/standalone_package/ valgrind --tool=massif --trace-children=yes ./execute.sh
------------- script output rawdata is: ""
failed to find out PID
感谢 Hayt 提供链接!我找到了解决方案!
所提供的second link需要QProcess
对象的实例。我不知道如何获得它。
但是使用 first link,我可以直接从应用程序和 valgrind
:
QString Scriptlauncher::getAppProcessId() {
long pid = (long)getpid();
qDebug ("------------- pid is %d", pid);
QString pidstr = QString::number(pid);
return pidstr;
}