0
アプリケーションのPIDを取得する目的があります。 私は簡単な関数がpgrep
コマンドを呼び出す書いた:Qt:スクリプトを使用してバイナリから実行すると、アプリケーションpidを見つけることができませんでした。
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");
}
私は(execute.sh
それを呼び出すのQtから直接プログラムを実行したり、簡単なスクリプトを使用している場合、それはアプリのバイナリを実行し、すべての必要な共有ライブラリをエクスポートして、 - を実行します端末からアプリ)、上記リターン正しい値からのコードブロック:
[email protected]:/standalone_package/ execute.sh
------------- script output rawdata is: "21094\n"
APPLICATION pid is "21094"
しかし、私はvalgrindのヒーププロファイラコマンドからexecute.shを実行すると、関数が返されます。
[email protected]:/standalone_package/ valgrind --tool=massif --trace-children=yes ./execute.sh
------------- script output rawdata is: ""
failed to find out PID
valgrindのは「奇妙な」環境の一種で、あなたのバイナリを実行します。したがって、pgrep/shellは利用できないかもしれません。あるいは '/ proc'です。自分のpidや別のアプリケーションを見つけたいですか?しかし、これは一般的にvalgrindに関連している可能性があります。 – Hayt
_あなた自身のpidや他のアプリケーションを見つけたいですか?_ 私自身のアプリのPIDを知りたいのですが。 – Constantine
http://man7.org/linux/man-pages/man2/getpid.2.htmlこれは、 – Hayt