Мне нужно запустить некоторые фоновые процессы, которые живут, пока я вошел в систему с определенным пользователем.
Существует ли что-то вроде демона для каждого пользователя? Я знаю только глобальные демоны, которые живут от запуска компьютера до выключения (или запуска / уничтожения вручную).
на данный момент я создал скрипт, который проверяет, существует ли процесс, и создает процесс, если его нет. Этот скрипт затем запускается с nohup
командой из моего .profile
. Таким образом, процесс запускается при запуске и запускается только один раз (даже при наличии нескольких rxvt
терминов). Тем не менее, он никогда не будет убит после того, как я войду в систему (что не является катастрофой, но более чистым, чтобы также завершить процесс).
источник
Служба dbus предназначена для того, чтобы ... хорошо, она может быть использована для этого :-). Пользователь dbus debus запускается, когда пользователь входит в среду рабочего стола, и завершается, когда пользователь выходит из системы (см. Справочную страницу
dbus-launch
и параметр--exit-with-session
). Служба dbus может быть запущена вместе с экземпляром dbus или при первом вызове интерфейса службы через dbus. Каждый пользователь может иметь свои собственные спецификации служб dbus, определенные в скрытом каталоге в домашнем каталоге пользователя или глобально в/etc
. Смотрите на Dbus домашнюю страницу на FreeDesktop для большого объема документации и эталонной реализации.В настоящее время я использую только дистрибутивы на основе Debian. У всех этих есть сценарии, в
/etc/X11/Xsession.d
которых очень часто изменяется строка, которая в самом конце будет оценена как команда, запускающая выбранную среду рабочего стола. Существует один такой сценарий для dbus, который добавляет команду к оболочке dbusdbus-launch
. Эта обертка запускает dbus-сервер и, по крайней мере, на ванильном Debian (и я хочу сказать "на всех дистрибутивах на основе Debian")dbus-launch
предоставляется опция--exit-with-session
.Вы должны иметь возможность обернуть процессы, которые вы хотите запустить, когда пользователь вошел в службу dbus, а IIRC dbus автоматически завершает работу своих служб перед выходом.
источник
Если вы используете BASH в качестве оболочки, вы можете попытаться сделать какое-то обнаружение в ~ / .bash_logout и завершить работающий процесс.
В долгосрочной перспективе вы, вероятно, ищете взаимодействие (например, через D-Bus) с чем-то вроде ConsoleKit или logind systemd .
источник