当有多个程序实例运行时,D-Bus能否连接到特定的PID?

时间:2015-02-03 14:42:52

标签: dbus

我试图编写一个程序,它将通过D-Bus与VLC交互。

当一个VLC实例正在运行时,我可以在shell中执行这样的事情

qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Pause
qdbus org.mpris.MediaPlayer2.vlc /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Play

VLC按预期暂停和恢复。大。

如果有多个VLC实例在运行,如何选择将命令发送到哪个实例怎么办?我知道它的PID。 DBus客户端不必是qdebus。

1 个答案:

答案 0 :(得分:0)

没有

每个d-bus连接都有唯一的名称,您可以稍后使用org.freedesktop.DBus.RequestName调用请求其他名称,但它也必须是唯一的。见" message bus names"规范的一部分。请注意,一个进程可以创建多个到总线的连接(因此有多个与之关联的名称)

进行d-bus函数调用时,使用服务名称,对象路径,接口名称和方法名称。第一个由总线守护程序用于路由您的消息,服务本身决定如何解释消息的路径/接口/方法/参数部分。

你可以通过另一种方式获得pid:行为良好的dbus客户端必须支持org.freedesktop.DBus接口,并且你有org.freedesktop.DBus.GetConnectionUnixProcessID。您可以迭代所有连接(ListNames方法)并将连接pid与您拥有的连接进行比较。这并不能保证一对一的映射。