从DBUS获取发件人PID

时间:2012-03-20 11:09:35

标签: c++ qt dbus

我花了四个小时进行深度搜索:),但没有找到:如何在Qt下从DBUS发送方获取PID。

从其他dbus库中可以很简单:

  

调用dbus_message_get_sender获取调用者的D-Bus id,然后调用GetConnectionUnixProcessID获取发送消息的进程的pid。

如何从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(Qt)从远程应用程序获取PID

// 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() ); 
    }

}

2 个答案:

答案 0 :(得分:1)

您是否考虑过从QDBusContext派生您的注册课程?这应该会在您的插槽中提供更多信息。

答案 1 :(得分:1)

1)const QDBusMessage&amp; QDBusContext :: message()const 返回生成此调用的消息。

2)QString QDBusMessage :: service()const 返回服务的名称或远程方法调用的总线地址。

3)QDBusReply QDBusConnectionInterface :: servicePid(const QString&amp; serviceName)const 返回当前持有总线服务serviceName的进程的Unix进程ID(PID)。