为了在嵌入式系统上正确启动一个小型 Qt 应用程序,我需要一种可靠的方法来确定 Qt QWS 服务器是否已经在运行。
否则我需要为-qws
应用程序提供选项来运行服务器本身。有没有办法做到这一点?
为了在嵌入式系统上正确启动一个小型 Qt 应用程序,我需要一种可靠的方法来确定 Qt QWS 服务器是否已经在运行。
否则我需要为-qws
应用程序提供选项来运行服务器本身。有没有办法做到这一点?
这是我解决的解决方案:
QWS 服务器使用套接字与其客户端对话。我测试这个套接字的存在。
我还测试了服务器是否真的打开了 socked 以避免在 QWS 服务器崩溃后掉入孤立的套接字。lsof
这是在套接字上使用(list open files) 完成的。如果服务器正在运行,则列表不会为空并且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
想到的唯一快速解决方法是:
ps aux | grep "\-qws"
并检查是否返回任何内容。除此之外,我认为你应该在你的项目中废弃 qws,因为它是一个相对陈旧和破碎的概念,以今天的标准来看。