启动后将 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 服务号的主要内容,如果未能解决你的问题,请参考以下文章

微信公众号开发

获取服务进程server.exe的pid(0号崩溃)

微信公众号开发技术基础:外网映射工具ngrok的简介和使用

求助,postgresql服务启动不了

微信公众号开发80端口映射之搭建ngrok服务器

linux中启动Nginx