Jak zamknąć wszystkie procesy użytkownika w trakcie jego wylogowania

Obecnie wygląda to tak, że po wylogowaniu jednego użytkownika i zalogowaniu innego, w pamięci pozostają procesy tego poprzedniego.

Chcę, aby po wylogowaniu się użytkownika ze wszystkich konsol, wszystkie jego procesy zostały zamknięte. Użytkownicy bowiem używają różnych programów do osiągania podobnych efektów i wskutek tego występują konflikty.

Pierwsze słyszę o takim zachowaniu. Jakie programy pozostają w pamięci? Chodzi ci o jakieś systemowe daemony?

Programy danego użytkownika możesz zabić np. poleceniem pkill -u <nazwa_użytkownika>, możesz to dorzucić do pliku bash_logout i będzie uruchamiane przy każdym wylogowaniu z basha.

A co z cronami?

Myślę, że warto zacząć poszukiwania od systemd. Skopiować plik /usr/lib/systemd/system/user@.service do /etc/systemd/system i go edytować

Oczywiście, jeżeli twój system ma zainstalowaną odpowiednią wersję systemd.

Przepraszam, że tak długo nie odpowiadałem

Wygląda to tak: https://imgur.com/UWyADCa.png

dodałem na końcu /home/profesor/.bash_logout
wpis pkill -u profesor

Nie działa.

/usr/lib/systemd/system/user@.service wygląda tak:

#  SPDX-License-Identifier: LGPL-2.1+
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[Unit]
Description=User Manager for UID %i
Documentation=man:user@.service(5)
After=systemd-user-sessions.service user-runtime-dir@%i.service dbus.service
Requires=user-runtime-dir@%i.service
IgnoreOnIsolate=yes

[Service]
User=%i
PAMName=systemd-user
Type=notify
ExecStart=-/usr/lib/systemd/systemd --user
Slice=user-%i.slice
KillMode=mixed
Delegate=pids memory
TasksMax=infinity
TimeoutStopSec=120s
KeyringMode=inherit

Jakieś pomysły?

Spróbuj wyedytować:
/etc/systemd/logind.conf
Usuń znak “#” sprzed #KillUserProcesses=no i zamień na:
KillUserProcesses=yes

Po zalogowaniu nowego użytkownika procesy poprzednich zostaną ubite.
Rozwiązanie działa na systemd 230+

Działa
…po ponownym uruchomieniu systemu :grin:

Znalazłem też rozwiązanie alternatywne.
W katalogu /usr/bin umieściłem plik tanatozer:

#!/bin/sh
pkill -u $USER

i nadałem mu prawa uruchamiania

W katalogu /usr/share/applications/ dodałem aktywator o następującej zawartości:

[Desktop Entry]
Version=1.0
Terminal=false
Icon=bomber
Type=Application
Categories=Settings;
Exec=/usr/bin/tanatozer
Name=Tanatozer
Comment=Ubija wszystkie procesy użytkownika
GenericName=Tanatoser
StartupNotify=false

Uwaga!
Jeżeli spróbujesz stosować oba te rozwiązania jednocześnie - biada ci!