
Situation
Ich habe eine Umgebung eingerichtet, in der sich Benutzer von mehreren Endpunkten aus anmelden und verwenden können tmux
, screen
… sodass sie sich am Ende ihrer Arbeit entweder aus ihrer SSH-Sitzung abmelden können, wodurch kein in einem Terminal-Multiplexer gespeicherter Prozess beendet wird. Sie können entweder pkill -u ${USER}
oder ausführen killall -u ${USER}
, um alle ihre Prozesse zu beenden. Dazu habe ich die Funktion in ein Skript namens eingeschlossen fulllogout
.
Problem
Beim Ausführen von pkill -u ${USER}
oder killall -u ${USER}
kann der Beendigungsprozess sich selbst oder seine Shell beenden, bevor er alle anderen Prozesse beendet, wodurch einige Prozesse am Leben bleiben.
Wie kann ich dies erfolgreich durchführen, ohne erhöhte Rechte zuzulassen?
Antwort1
kill -TERM -1
sendet SIGTERM an jeden Prozess, für den es die Berechtigung dazu hat (außer PID 1) und kill -KILL -1
beendet ebenfalls alles, was möglich ist. Dies geschieht in einem einzigen Systemaufruf, kann sich also nicht zwischendurch selbst beenden.