
Ich habe einen alten Benutzer (Bob) in meinem System. Laut der Ausgabe von „top“ scheinen viele Prozesse von diesem Benutzer ausgeführt zu werden (der Befehl für die meisten davon ist „Java“). Da ich Root-Zugriff habe, habe ich den Benutzer gelöscht, die Prozesse laufen jedoch weiterhin mit dem Benutzer „1000“. Wie kann ich verhindern, dass diese Prozesse dauerhaft ausgeführt werden?
Antwort1
Wenn Sie den Benutzer gelöscht haben und dabei auch alle Cronjobs usw. gelöscht wurden, die der Benutzer möglicherweise hatte, sollte ein Neustart des Systems dafür sorgen, dass die Prozesse beendet werden, ohne dass sie beim erneuten Hochfahren des Systems neu gestartet werden.
Wenn ein Neustart keine Option ist, können Sie ein Beendigungssignal an alle Prozesse des Benutzers mit der UID 1000 senden mit
sudu pkill -u 1000
Sie können sehen, welche Prozesse von diesem Befehl betroffen sind, indem Sie zuerst ausführen
pgrep -u 1000
Siehe auch man pkill
.
Antwort2
Zuerst speichere ich den aktuellen Status aller Prozesse des Servers in einer Datei.
ps -wwfax -o uid=,pid=,ppid=,cmd= > /root/list_of_process_as_today.txt
Danach werde ich mich auf meinen schlechten Benutzer konzentrieren.
ps -wwfax -o uid=,pid=,ppid=,cmd= | sed '/^ *1000 *\([0-9][0-9]*\) .*$/p;d'
Ein Beispiel für die Ausgabe kann sein:
1000 3096 3087 \_ sshd: em444@pts/0
1000 3099 3096 \_ -bash
1000 3543 3099 \_ ps -wwfax -o uid=,pid=,ppid=,cmd=
1000 3544 3099 \_ sed /^ *1000 *\([0-9][0-9]*\) .*$/p;d
1000 21628 1 SCREEN
1000 21629 21628 \_ /bin/bash
Analyse der Prozessliste
meine aktuelle Shell ist Prozess 3099. Sie können einige untergeordnete Prozesse sehen, den Befehl, den ich ausgeführt habe3543und ein Elternteil3096
Sie können sehen, dass ich den Prozess 21628 habe, sein Elternteil ist Prozess1, Verfahren1ist das übergeordnete Element aller Prozesse.
Danach kann ich diesen Befehl verwenden, um alle Prozesse zu beenden.
kill $(/root/list_of_process_as_today.txt | sed 's/^ *1000 *\([0-9][0-9]*\) .*$/\1/p;d')