Чтобы правильно запустить небольшое приложение Qt во встроенной системе, мне нужен надежный способ выяснить, работает ли уже сервер Qt QWS.
В противном случае мне нужно будет предоставить -qws
вариант приложения для запуска самого сервера. Есть ли способ сделать это?
Вот решение, которое я выбрал:
Сервер QWS использует сокет для общения со своими клиентами. Я проверяю наличие этой розетки.
Я также проверяю, действительно ли сервер имеет открытый носок, чтобы избежать падения для потерянных сокетов, оставшихся после сбоя сервера 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
После этого я могу запустить свое приложение Qt, используя $QWSOPT
переменная:
app $QWSOPT
Единственный быстрый обходной путь, который приходит на ум, это:
ps aux | grep "\-qws"
и проверьте, что это возвращает. Кроме этого, я думаю, что вы должны устаревшие qws в вашем проекте, так как это относительно старая и сломанная концепция с сегодняшними стандартами.