Я написал приложение с графическим интерфейсом для Linux на Python, которое должно выполнить некоторые задачи по очистке, прежде чем завершить работу, когда пользователь выходит из системы. К сожалению, кажется, что при выходе все приложения убиты. Я пытался обрабатывать сигналы POSIX и уведомления DBUS, но ничего не получалось. Есть идеи, что я мог сделать неправильно?

При запуске приложения я регистрирую некоторые обработчики завершения:

# create graceful shutdown mechanisms
signal.signal(signal.SIGTERM, self.on_signal_term)
self.bus = dbus.SessionBus()
self.bus.call_on_disconnection(self.on_session_disconnect)

Когда пользователь выходит из системы, ни self.on_signal_term, ни self.on_session_disconnect не вызываются.

Проблема возникает в нескольких сценариях: Ubuntu 14.04 с Unity, Debian Wheezy с Gnome.

Полный код: https://github.com/tuxpoldo/btsync-deb/tree/master/btsync-gui

1 ответ1

0

Традиционно это делается с использованием XSMP и libSM . Если вы просите администратора сеанса выйти из системы, он отправляет сообщения "SaveYourself" всем клиентам, которые зарегистрировались в нем через XSMP.

Программа не убивается, хотя; он выходит сам по себе, когда Xlib теряет соединение с сервером X11. (Я не уверен, есть ли у gtk возможность отключить это.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .