启动后将 pid 映射到 qdbus 服务号
Posted
技术标签:
【中文标题】启动后将 pid 映射到 qdbus 服务号【英文标题】:mapping pid to qdbus service numbers after launching 【发布时间】:2012-04-12 03:29:49 【问题描述】:我正在尝试编写一个 bash 脚本,该脚本将启动一个程序 (konsole) 并向其发送 dbus 消息。这是我的实验
konsole &
echo pid is $!
ps aux | grep konsole
qdbus | grep konsole
这个输出
pid is 2726
me 2726 0.0 0.4 45404 9952 pts/0 S+ 14:59 0:00 konsole
org.kde.konsole-2729
qdbus 服务名称始终为org.kde.konsole-pid+epsilon
,但epsilon 部分不可预测。
在我的 bash 脚本中,如何获取我刚刚生成的特定 konsole 实例的确切 qdbus 服务名称?
这是一个令人讨厌的、骇人听闻的解决方案
qdbus | grep konsole | sed 's/[^0-9]//g' > /tmp/before
konsole &
sleep 1
qdbus | grep konsole | sed 's/[^0-9]//g' > /tmp/after
N=`sort /tmp/before /tmp/after | uniq -u`
但肯定有更好的方法!
【问题讨论】:
【参考方案1】:尝试使用 qdbus org.kde.konsole /Konsole newSession
通过 D-Bus API 启动新的 Konsole 实例。它将返回会话 ID,稍后可以通过调用 org.kde.konsole
服务的 /Session/$SID
对象来控制它。
【讨论】:
Service 'org.kde.konsole' does not exist.
但如果我手动启动 konsole 则服务 org.kde.konsole.12345
(或类似的)存在。 qdbus | grep konsole
不列出任何结果,除非我正在运行至少一个 konsole。【参考方案2】:
您可以检查 qdbus 的 PPID,以查看相关的 konsole。
【讨论】:
以上是关于启动后将 pid 映射到 qdbus 服务号的主要内容,如果未能解决你的问题,请参考以下文章