如何让 Linux Python 应用程序正确处理用户注销时的终止?

如何让 Linux Python 应用程序正确处理用户注销时的终止?

我用 Python 编写了一个 Linux GUI 应用程序,该应用程序需要在用户注销时终止之前执行一些清理任务。不幸的是,似乎在注销时,所有应用程序都会被终止。我尝试处理 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叫做。

该问题出现在几种情况下:带有 Unity 的 Ubuntu 14.04、带有 Gnome 的 Debian Wheezy。

完整代码:https://github.com/tuxpoldo/btsync-deb/tree/master/btsync-gui

答案1

传统上,这是使用分布式多点系统libSM。如果您要求会话管理器注销,它会向所有通过 XSMP 向其注册的客户端发送“SaveYourself”消息。

但是,程序不会被终止;当 Xlib 失去与 X11 服务器的连接时,它会自动退出。(我不确定 gtk 是否有禁用该功能的选项。)

相关内容