Machen Sie Speicher frei, indem Sie die von Top angezeigten Prozesse entfernen

Machen Sie Speicher frei, indem Sie die von Top angezeigten Prozesse entfernen

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')

verwandte Informationen