D-Bus 总线模型

在 D-Bus 的上下文中,每个到总线的连接都通过所谓的总线名称来标识。总线名称由两个或两个以上点分隔的字母、数字、破折号和下划线组成。有效总线名称的一个例子是 org.freedesktop.NetworkManager

当进程建立到总线的连接时,总线会为连接分配一个特殊的总线名称,称为唯一连接名称(unique connection name)。这种类型的总线名称是不可变的 —— 只要连接存在就保证它们不会改变,更重要的是,它们不能在总线生命周期内重复使用。这意味着与该总线的任何其他连接都不会分配这样唯一的连接名称,即使同一进程关闭与总线的连接并创建一个新连接也是如此。唯一的连接名称很容易识别,因为它们以冒号字符开头 —— 否则禁止使用。唯一连接名称的示例是 :1.1553(冒号后面的字符没有特殊含义)。

一个进程可以为其连接请求额外的总线名称,前提是任何请求的名称尚未被另一个总线连接使用。在 D-Bus 的说法中,当一个总线名称被分配给一个连接时,就说该连接拥有该总线名称。从这个意义上说,一个总线名称不能同时由两个连接拥有。但是,与唯一的连接名称不同,如果它们可用,这些名称可以被重用 —— 一个进程可能会回收另一个进程释放的总线名称,无论该进程是有意还是无意释放。

这些额外的总线名称(通常称为众所周知的名称)背后的想法是提供一种使用预先安排的总线名称来引用服务的方法。例如,报告系统总线中当前时间和日期的服务位于其连接拥有 org.freedesktop.timedate1 总线名称的进程中,无论它是哪个进程。

总线名称可以作为实现单实例应用程序的一种简单方法(第二个实例检测总线名称已被使用)。它还可以用来跟踪服务进程的生命周期,因为当由于进程终止而释放总线名称时,总线会发送一个通知。