Dbus——故障控制

Posted

技术标签:

【中文标题】Dbus——故障控制【英文标题】:Dbus - fault control 【发布时间】:2011-04-20 12:01:57 【问题描述】:

有没有一种方法可以通知通过 Dbus 连接的进程另一个进程死亡?我的意思是故障进程可以通知另一个进程他有异常终止。我知道您可以检查错误类型返回,但我想要别的东西。例如,我们有一个进程在等待答案,但我们用 CTRL+C 杀死了另一个进程。有没有办法通知其他进程..或者你应该等待几秒钟的响应......等等

【问题讨论】:

【参考方案1】:

在低级别:您可以连接到 D-Bus 守护程序上的 NameOwnerChanged 信号,每当在总线上声明或释放名称时都会发出该信号。因此,如果工作进程采用众所周知的名称com.example.Foo,则可以为sender=org.freedesktop.DBus,path=/org/freedesktop/DBus,interface=org.freedesktop.DBus,member=NameOwnerChanged,type=signal,arg0=com.example.Foo 添加匹配规则。 (match rule 的 arg0 部分可防止您收到您关心的服务以外的服务通知。)

更高级别:如果您正在等待方法调用的结果,您的绑定(例如 QDBus 或 GDBus)应该调用您的回调并显示一个错误,告诉您这是发生了什么。但您也可以使用更高级别的 API 来观看NameOwnerChanged。对于 GDBus,请参阅g_bus_watch 系列函数。

【讨论】:

以上是关于Dbus——故障控制的主要内容,如果未能解决你的问题,请参考以下文章

如何从控制台创建 dbus 服务?

在网络管理器的直接 dbus 控制中模拟 nmcli --ask

通过 Python 的 dbus 模块控制 CentOS 中的 firewalld?

带参数的 dbus 激活

通过 dbus 共享对象

从python访问iwd dbus接口