有类似每个用户守护进程的东西吗?

有类似每个用户守护进程的东西吗?

我需要运行一些后台进程,只要我以某个用户登录,这些进程就会一直存在。

是否存在类似每用户守护进程的东西?我只知道从计算机启动到关闭(或手动启动/终止)的全局守护进程。

现在我制作了一个脚本来检查该进程是否已存在,如果不存在则创建该进程。然后使用nohup我的.profile.这样,该流程在启动时启动,并且仅启动一次(即使有多个rxvt术语来来去去)。然而,在我登录后它永远不会被杀死(这不是灾难,但终止进程会更干净)。

答案1

systemd 允许用户运行自己的 systemd 实例来管理私有守护进程。

如果您已经安装了 systemd,您所要做的就是systemd --user通过运行 来启动和管理您的服务systemctl --user。将在 中搜索用户服务~/.config/systemd/user

默认情况下,systemd 将在注销时终止用户服务(根据您的请求)。可以通过使用该命令为用户启用延迟来更改此行为loginctl --enable-linger $USER

更多信息可以在建筑维基页面

答案2

dbus 服务正是用于此目的...好吧,它可以用于此目的:-)。每用户 dbus 守护进程在用户登录到桌面环境时启动,并在用户注销时终止(请参阅 的手册页dbus-launch和选项--exit-with-session)。 dbus 服务可以与 dbus 实例一起启动,也可以在第一次通过 dbus 调用该服务的接口时启动。每个用户都可以有自己的 dbus 服务规范,定义在用户主目录的隐藏目录中,或者全局定义在/etc.看freedesktop 上的 dbus 主页大量文档和参考实现。

这些天我只使用基于 Debian 的发行版。所有这些脚本都有/etc/X11/Xsession.d经常修改字符串的脚本,该字符串最后将被评估为启动所选桌面环境的命令。 dbus 有一个这样的脚本,它在命令前面加上 dbus 包装器dbus-launch。这个包装器启动了一个 dbus 服务器,并且至少在 vanilla Debian 上(我愿意说“在所有基于 Debian 的发行版上”)dbus-launch提供了选项--exit-with-session

您应该能够在用户登录 dbus 服务时包装您想要运行的进程,并且 IIRC dbus 会在退出之前自动终止其服务。

答案3

如果您使用 BASH 作为 shell,您可以尝试在 ~/.bash_logout 中进行一些检测并关闭正在运行的进程。

从长远来看,您可能正在寻找的是与类似的东西进行交互(例如通过D-Bus)控制台工具包或系统的已登录

相关内容