启动后将pid映射到qdbus服务号码

时间:2012-03-28 14:06:07

标签: bash dbus pid qdbus

我正在尝试编写一个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`

但肯定有更好的方法!

2 个答案:

答案 0 :(得分:0)

尝试使用qdbus org.kde.konsole /Konsole newSession通过D-Bus API启动新的Konsole实例。它将返回会话ID,以后可以通过调用/Session/$SID服务的org.kde.konsole对象来控制它。

答案 1 :(得分:0)

您可以检查qdbus的PPID,以查看相关的Konsole。