Answers:
systemd允许用户运行自己的systemd实例来管理专用守护程序。
如果您已经安装了systemd,则只需systemd --user
运行运行并启动和管理服务systemctl --user
。将在中搜索用户服务~/.config/systemd/user
。
默认情况下,systemd将在注销时终止用户服务(根据您的要求)。可以通过使用loginctl --enable-linger $USER
命令为用户保留时间来更改此行为。
您可以在ArchWiki页面上找到更多信息。
dbus服务的目的在于……好吧,它可以用于:-)。每用户dbus守护进程在用户登录到桌面环境时启动,并在用户注销时终止(请参见dbus-launch
和选项的手册页--exit-with-session
)。可以与dbus实例一起启动dbus服务,也可以在首次通过dbus调用服务的接口时启动它。每个用户可以有自己的dbus服务规范,可以在用户主目录的隐藏目录中定义,也可以在中全局定义/etc
。有关大量文档和参考实现,请参见freedesktop上的dbus主页。
这些天我只使用基于Debian的发行版。所有这些脚本都具有脚本,/etc/X11/Xsession.d
其中经常会修改一个字符串,该字符串最后将被评估为启动所选桌面环境的命令。dbus有一个这样的脚本,该脚本在dbus包装器之前添加了命令dbus-launch
。这个包装器启动了一个dbus服务器,并且至少在香草Debian上(我愿意说“在所有基于Debian的发行版上”)dbus-launch
都可以选择--exit-with-session
。
您应该能够在用户登录dbus服务时包装要运行的进程,并且IIRC dbus在退出前自动负责终止其服务。
如果您使用BASH作为外壳程序,则可以尝试在〜/ .bash_logout中进行一些检测并关闭正在运行的进程。
从长远来看,您可能正在寻找的是与ConsoleKit或systemd的logind之类的东西进行交互(例如,通过D-Bus)。