Muszę uruchomić niektóre procesy działające w tle, dopóki jestem zalogowany z określonym użytkownikiem.
Czy istnieje coś takiego jak demon na użytkownika? Znam tylko globalne demony, które żyją od uruchomienia komputera do wyłączenia (lub ręcznego uruchomienia / zabicia).
na razie stworzyłem skrypt, który sprawdza, czy proces już istnieje, i tworzy go, jeśli nie istnieje. Ten skrypt jest następnie uruchamiany za pomocą nohup
polecenia z mojego .profile
. W ten sposób proces uruchamia się przy starcie i jest uruchamiany tylko raz (nawet przy wielu rxvt
terminach wchodzących i wychodzących). Jednak nigdy nie zostaje zabity po zalogowaniu (co nie jest katastrofą, ale czystsze jest także zakończenie procesu).
źródło
Usługa dbus jest przeznaczona do tego, aby ... ok, można z niej korzystać dokładnie :-). Diamon dbus na użytkownika jest uruchamiany, gdy użytkownik loguje się do środowiska pulpitu, i kończy się, gdy użytkownik się wylogowuje (patrz strona podręcznika użytkownika
dbus-launch
i opcja--exit-with-session
). Usługa dbus może zostać uruchomiona razem z instancją dbus lub gdy interfejs usługi zostanie wywołany po raz pierwszy przez dbus. Każdy użytkownik może mieć własne specyfikacje usług dbus, zdefiniowane w ukrytym katalogu w domu użytkownika lub globalnie w/etc
. Zobacz stronę główną dbus na freedesktop, aby uzyskać dużo dokumentacji i referencji.Obecnie używam tylko dystrybucji opartych na Debianie. Wszystkie mają skrypty, w
/etc/X11/Xsession.d
których bardzo często modyfikują ciąg znaków, który na samym końcu zostanie oceniony jako polecenie uruchamiające wybrane środowisko pulpitu. Istnieje jeden taki skrypt dla dbus, który poprzedza polecenie opakowaniem dbusdbus-launch
. To opakowanie uruchamia serwer dbus i przynajmniej na waniliowym Debianie (i jestem skłonny powiedzieć „na wszystkich dystrybucjach opartych na Debianie”)dbus-launch
ma tę opcję--exit-with-session
.Powinieneś być w stanie owinąć procesy, które chcesz uruchomić, gdy użytkownik jest zalogowany do usługi dbus, a IIRC dbus automatycznie zajmuje się zakończeniem swoich usług przed wyjściem.
źródło
Jeśli używasz BASH jako powłoki, możesz spróbować przeprowadzić wykrywanie w ~ / .bash_logout i zamknąć uruchomiony proces.
To, czego prawdopodobnie szukasz w dłuższej perspektywie, to interakcja (np. Przez D-Bus) z czymś takim jak ConsoleKit lub logd systemu .
źródło