Russian Qt Forum

Qt => Вопросы новичков => Тема начата: xintrea от Май 02, 2013, 17:40



Название: Как отловить завершение работы X-сервера? (События? Events?)
Отправлено: xintrea от Май 02, 2013, 17:40
Здраствуйте!


Есть в моей Qt-программе застаревший баг. Программа постоянно висит в систрее. При выключении X-сервера программа видимо, держит какой-то открытый файл, и блокирует выход из X-сервера. Появляется сообщение о том, что прорамма не позволяет завершить работу X-сервера. Чтобы выключить компьютер, приходится вручную выйти из программы, после чего X-сервер нормально выключается.

(В данный момент я грешу на QtSingleApplication, так как данный объект держит открытым lock-файл. Но это не суть.)

В общем, нужно каким-то образом отловить сигналы X-сервера, и в момент прихода сигнала о завершении работы X-сервера выйти из программы. В связи с этим вопросы:

1. Кто-нибудь знает, что за сигнал выдает X-сервер при завершении работы?

2. Требуется пример кода для отслеживания сигналов X-сервера.


Название: Re: Как отловить завершение работы X-сервера? (События? Events?)
Отправлено: maint от Май 02, 2013, 18:03
скорей всего либо SIGKILL посылается, либо SIGTERM.
в man signal все хорошо описано


Название: Re: Как отловить завершение работы X-сервера? (События? Events?)
Отправлено: xintrea от Май 02, 2013, 19:41
скорей всего либо SIGKILL посылается, либо SIGTERM.
в man signal все хорошо описано

Нет, ни SIGKILL ни SIGTERM при закрытии X-сервера не отправляются. SIGKILL и SIGTERM отправляются при окончательном завершении работы системы, т. е. гораздо пожже чем выключение X-сервера. Это уже выяснено не только мной:

http://forum.ubuntu.ru/topic_140773_15.html

Тут надо именно события X-сервера ловить. А я не пойму как это делается.