Dbus——故障控制

Ste*_*rge 2 dbus

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

wjt*_*wjt 5

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

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