【问题标题】:Detect whether there is a qws server running检测是否有qws服务器在运行
【发布时间】:2014-06-03 07:01:49
【问题描述】:

为了在嵌入式系统上正确启动一个小型 Qt 应用程序,我需要一种可靠的方法来确定 Qt QWS 服务器是否已经在运行。

否则,我需要向应用程序提供 -qwsoption 以运行服务器本身。有办法吗?

【问题讨论】:

  • 读取进程表和传递的选项有什么问题?
  • @FinalContest 发布正确答案有什么问题?你甚至可能会被点赞:)
  • 对不起,我个人认为这不是最好的方法,但我也不认为有更简单的方法,很遗憾。 Fwiw,我不明白为什么这个问题被否决了。也许有人认为它太短了。我现在补偿了。 :)
  • @FinalContest 谢谢。无意冒犯,无意冒犯。愉快的黑客攻击。

标签: c++ qt qt4 qtgui qtembedded


【解决方案1】:

这是我选择的解决方案:

QWS 服务器使用套接字与其客户端对话。我测试这个套接字的存在。

我还测试了服务器是否真的打开了 socked 以避免在 QWS 服务器崩溃后掉入孤立的套接字。这是在套接字上使用lsof(列出打开的文件)完成的。如果服务器正在运行,则列表不会为空,lsof 将返回true。如果服务器没有运行,lsof 将返回false

在我的系统上,套接字位于/tmp/qtembedded-0/QtEmbedded-0

所以这里是 bash 代码:

QWSSOCK=/tmp/qtembedded-0/QtEmbedded-0

if [ ! -S $QWSSOCK ] ; then
    echo "No socket $QWSSOCK"
    QWSOPT=-qws
elif lsof $QWSSOCK ; then
    echo "Server running on $QWSSOCK"
    QWSOPT=
else
    echo "No server on $QWSSOCK"
    QWSOPT=-qws
fi

在此之后,我可以使用 $QWSOPT 变量运行我的 Qt 应用程序:

app $QWSOPT

【讨论】:

  • 目录仍然存在,即使服务器停止。所以,这种方法不是很可靠
  • @BЈовић 是的,如果服务器崩溃,目录甚至套接字都可能保留。这就是代码使用lsofcommand 来查看服务器是否真的打开了socked 的原因。这使得该方法非常可靠。
  • 对不起。不知怎的,我错过了lsof
【解决方案2】:

想到的唯一快速解决方法是:

ps aux | grep "\-qws"

并检查是否返回任何内容。除此之外,我认为您应该在您的项目中弃用 qws,因为按照今天的标准,它是一个相对陈旧且破碎的概念。

【讨论】:

  • 不幸的是,这是不可靠的,因为 Qt 程序可能运行 QWS 服务器,而在其命令行上没有 -qws 选项。此外,该字符串可能是其他命令行元素的一部分。
  • @Ber:对于前者,是的,如果 QApplication 是用该类型构造的。我不确定您是否可以在没有一些额外代码(即配置、IPC 等)的情况下检测到这一点。至于后者,这在理论上是正确的,但我还没有找到在实践中发生这种情况的案例。 ;-)
猜你喜欢
  • 1970-01-01
  • 2019-05-14
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
相关资源
最近更新 更多