/etc/profile.d/
我用 C++ 编写了一个守护进程,该守护进程在登录时使用在运行 makefile 部分时放置的 bash 脚本自动启动install
。问题是,当我注销并重新登录时,现在有两个守护进程实例正在运行。
我希望第一个在我注销时停止,而不是继续运行。无论如何,它只能在有人登录时运行。如何确保我的守护进程在我注销后不再运行?
答案1
如果您在应用程序中使用 D-Bus,则可以在 org.gnome.SessionManager 接口上监听 SessionOver 信号。使用 C++ Qt5,您的代码将如下所示:
QDBusConnection dbus = QDBusConnection::sessionBus();
dbus.connect("org.gnome.SessionManager", "",
"org.gnome.SessionManager", "SessionOver",
this, SLOT(handle_sessionOver());
参考:
- GNOME 会话管理器文档
- QDBusConnection 类(不要忘记在你的 qmake 中添加“QT += dbus”)
答案2
您可以使用在注销时执行的 bash 脚本来停止守护进程
添加以下行lightdm配置文件
session-cleanup-script=<path-to-logout-bash-script>
lightdm.conf 可以在以下位置找到:
/etc/init/lightdm.conf
或者
- /etc/lightdm/lightdm.conf
这可能会起作用