2016-10-25 4 views
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 
+0

valgrindのは「奇妙な」環境の一種で、あなたのバイナリを実行します。したがって、pgrep/shellは利用できないかもしれません。あるいは '/ proc'です。自分のpidや別のアプリケーションを見つけたいですか?しかし、これは一般的にvalgrindに関連している可能性があります。 – Hayt

+0

_あなた自身のpidや他のアプリケーションを見つけたいですか?_ 私自身のアプリのPIDを知りたいのですが。 – Constantine

+1

http://man7.org/linux/man-pages/man2/getpid.2.htmlこれは、 – Hayt

答えて

0

リンクありがとうございました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; 
} 
関連する問題