我花了四个小时进行深度搜索:),但没有找到:如何在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() );
}
}
答案 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)。