Grundsätzlich muss ich in der Lage sein, den Prozessbaum zu scannen und Prozesse zu finden, die einem bestimmten Namen entsprechen und mehr als eine Woche hintereinander ausgeführt werden. Sobald ich sie habe, muss ich sie töten. Alle Prozesse werden vom System weiterhin als ausgeführt angesehen, es wird nur keine Systemzeit verwendet. Sie werden normalerweise auch für immer in diesem Zustand sitzen.
Idealerweise möchte ich etwas Ähnliches finden, aber für Prozesse.
Das System ist Debian Linux und dieses wird von cron geschrieben und ausgeführt, so dass ich keine wirklichen Probleme mit etwas Großem, aber Verständlichem habe.
Antworten:
Sie können dies mit einer Kombination aus ps, awk und kill tun:
Gibt Ihnen eine dreispaltige Ausgabe mit der Prozess-PID, der seit dem Start des Prozesses verstrichenen Zeit und dem Befehlsnamen ohne Argumente. Die verstrichene Zeit sieht wie folgt aus:
Da Sie Prozesse wünschen, die länger als eine Woche ausgeführt werden, suchen Sie nach Linien, die diesem dritten Muster entsprechen. Sie können awk verwenden, um die Prozesse nach Laufzeit und Befehlsnamen wie folgt herauszufiltern:
Hiermit werden die Pids aller Befehle gedruckt, die mit 'mycommand' übereinstimmen und seit mehr als 7 Tagen ausgeführt werden. Pipe diese Liste in töten, und Sie sind fertig:
quelle
etimes
ist praktischer - serverfault.com/a/393476/67675killall --quiet --older-than 1w process_name
quelle
Alle Informationen, die Sie benötigen, können abgerufen werden
ps -ef
. Siehe die Spalte "STIME". Kombinieren Sie dies mitgrep
, um die Prozesse zu sortieren, die Sie benötigen. An diesem Punkt können Siecut
die PID aller Matching-Prozesse abrufen und an übergebenkill
.Bitte lassen Sie mich wissen, wenn Sie weitere Informationen dazu wünschen.
quelle
Wenn Sie root sind, um den Müll loszuwerden (/ proc / fs proc / stat ...)
quelle
Wenn ein Prozess gestartet wird, wird ein Verzeichnis im Dateisystem / proc erstellt. Mit dem Befehl find können Sie Verzeichnisse abrufen, die älter als 7 Tage sind, und die Prozesse wie folgt beenden:
quelle
find: warning: you have specified the -maxdepth option after a non-option argument -user, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
Wenn Sie -maxdepth als erste Ausgabe verschieben, werden keine Prozesse zurückgegeben, und ich bin mir sicher, dass viele übereinstimmen sollten.Niemand erwähnte hier ps-watcher . Ich denke, Sie können $ start_time möglicherweise mit der Funktion elapsed2sec vergleichen, bin mir aber nicht ganz sicher. Hier ist mein erster Gedanke:
Keine Ahnung, ob das funktioniert, aber es sollte ein guter Ausgangspunkt sein.
quelle