2012-03-20 18 views
1

深い検索で4時間を費やしましたが、見つからなかった:Qtの下でDBUS送信者からPIDを取得する方法。呼び出し側のD-バスIDを取得して、メッセージを送ったプロセスのpidを取得するためにGetConnectionUnixProcessIDを呼び出すためのDBUSから送信者PIDを取得する

コールdbus_message_get_sender:それは非常に簡単です他のdbusのlibsから

Qtからの操作方法? このコードを使用しようとしましたが、クライアントアプリケーションではなくPIDが返されます。

class ServerAdaptor: public QDBusAbstractAdaptor 
{ 
public Q_SLOTS: 

// this method shared through the D-BUS and called from different application (client) 
bool Show(const QString &in0) 
{ 
    QDBusConnection connection = QDBusConnection::connectToBus(QDBusConnection::SessionBus, "org.freedesktop.DBus"); 

    if(connection.isConnected()) 
    { 
     qDebug() << "Sender PID " << connection.interface()->servicePid( QDBusConnection::sender().baseService()).value(); 
    } 

} 
} 

編集:

D-BUSを介してリモートアプリケーションからのPIDを取得する方法(Qtの)

// this class receive D-BUS methods 
class Server: public QObject, protected QDBusContext { 

public slots: 

    bool SomeMethod(const QString &name) 
    { 
    qDebug() << "PID is: " << connection().interface()->servicePid(message().service()); 
    } 

}

答えて

1

1)const QDBusMessage & QDBusContext :: message()const この呼び出しを生成したメッセージを返します。

2)QString QDBusMessage :: service()const リモートメソッド呼び出しのサービス名またはバスアドレスを返します。

3)現在のバスのサービスservicenameを保持しているプロセスのためのUNIXプロセスID(PID)を返します QDBusReply QDBusConnectionInterface :: servicePid(のconst QStringの& serviceNameを)のconst。

1

あなたはまだQDBusContextからご登録のクラスを派生に見てきました?それはあなたのスロットに追加情報を与えるはずです。

+0

connection()。baseService()はQDBusConnection :: sender()。baseService()と同じです。私は私についてではなく、発信者に関する情報を得る必要があります。呼び出し元プロセスについて何かを取得するには? org.freedesktop.DBus.GetConnectionUnixProcessIDからPIDを取得するために接続のバス名を取得する必要があります – Dmitry

関連する問題