Ich muss einige Hintergrundprozesse ausführen, die so lange ausgeführt werden, wie ich mit einem bestimmten Benutzer angemeldet bin.
Gibt es so etwas wie einen Benutzer-Daemon? Ich kenne nur globale Dämonen, die vom Start des Computers bis zum Herunterfahren (oder manuellem Starten / Töten) leben.
Im Moment habe ich ein Skript erstellt, das prüft, ob der Prozess bereits vorhanden ist, und den Prozess erstellt, wenn dies nicht der Fall ist. Dieses Skript wird dann mit dem nohup
Befehl von my ausgeführt .profile
. Auf diese Weise wird der Prozess beim Start gestartet und nur einmal gestartet (auch wenn mehrere rxvt
Begriffe kommen und gehen). Es wird jedoch nie getötet, nachdem ich mich angemeldet habe (was keine Katastrophe ist, aber es ist sauberer, den Prozess auch zu beenden).
quelle
Der dbus-Dienst ist genau dafür gedacht, dass ... ok, er kann genau dafür verwendet werden :-). Das dbus-Deamon pro Benutzer wird gestartet, wenn sich ein Benutzer bei einer Desktop-Umgebung anmeldet, und wird beendet, wenn sich der Benutzer abmeldet (siehe Manpage von
dbus-launch
und die Option--exit-with-session
). Ein dbus-Dienst kann zusammen mit der dbus-Instanz oder beim ersten Aufruf der Dienstschnittstelle über dbus gestartet werden. Jeder Benutzer kann seine eigenen dbus-Dienstspezifikationen haben, die in einem versteckten Verzeichnis in der Startseite des Benutzers oder global in definiert sind/etc
. Auf der dbus-Homepage auf freedesktop finden Sie zahlreiche Dokumentationen und Referenzimplementierungen.Ich benutze heutzutage nur Debian-basierte Distributionen. Alle diese haben Skripte, in
/etc/X11/Xsession.d
denen sehr oft eine Zeichenfolge geändert wird, die ganz am Ende als Befehl ausgewertet wird, mit dem die ausgewählte Desktop-Umgebung gestartet wird. Es gibt ein solches Skript für dbus, das dem Befehl den dbus-Wrapper voranstelltdbus-launch
. Dieser Wrapper startet einen dbus-Server und zumindest auf Vanilla Debian (und ich bin bereit zu sagen "auf allen Debian-basierten Distributionen")dbus-launch
wird die Option gegeben--exit-with-session
.Sie sollten in der Lage sein, die Prozesse, die ausgeführt werden sollen, zu verpacken, während ein Benutzer bei einem dbus-Dienst angemeldet ist und IIRC dbus sich automatisch darum kümmert, seine Dienste vor dem Beenden zu beenden.
quelle
Wenn Sie BASH als Shell verwenden, können Sie versuchen, in ~ / .bash_logout eine Erkennung durchzuführen und den laufenden Prozess herunterzufahren.
Was Sie wahrscheinlich längerfristig suchen, ist die Interaktion (z. B. über D-Bus) mit etwas wie ConsoleKit oder systemds logind .
quelle