796 Stimmen

Mit Bash und Regex einen Prozess in einer Zeile finden und beenden

Ich muss oft einen Prozess während der Programmierung beenden.

Ich mache es jetzt so:

[~]$ ps aux | grep 'python csp_build.py'
user    5124  1.0  0.3 214588 13852 pts/4    Sl+  11:19   0:00 python csp_build.py
user    5373  0.0  0.0   8096   960 pts/6    S+   11:20   0:00 grep python csp_build.py
[~]$ kill 5124

Wie kann ich die Prozess-ID automatisch extrahieren und sie in derselben Zeile beenden?

Zum Beispiel so:

[~]$ ps aux | grep 'python csp_build.py' | kill <regex that returns the pid>

3 Stimmen

Glauben Sie mir! :'D Die erste Antwort, die Sie gewählt haben, ist viel komplexer als die Lösung, die Sie in Ihrer Antwort angegeben haben. Ich würde lieber deinen Weg wählen.

0 Stimmen

Die beste Möglichkeit zu prüfen, ob ein Prozess existiert: stackoverflow.com/questions/3043978/

17voto

Rahul Punkte 1838

Versuchen Sie es mit

ps aux | grep 'python csp_build.py' | head -1 | cut -d " " -f 2 | xargs kill

13voto

NGix Punkte 2374

Sie dürfen nur verwenden pkill '^python*' für die Regex-Prozessabschaltung.

Wenn du sehen willst, was du töten oder finden wirst, bevor du tötest, benutze einfach pgrep -l '^python*' wobei -l auch den Namen des Prozesses ausgibt. Wenn Sie nicht pkill verwenden Sie einfach:

pgrep '^python*' | xargs kill

11voto

vr286 Punkte 807

Verwenden Sie pgrep - verfügbar auf vielen Plattformen:

kill -9 `pgrep -f cps_build`

pgrep -f gibt alle PIDs mit der Koinzidenz "cps_build" zurück

8voto

avivamg Punkte 8416

Die Lösung würde die Prozesse mit exaktem Muster herausfiltern, die pid analysieren und eine Argumentliste für die Ausführung von Kill-Prozessen erstellen:

ps -ef  | grep -e <serviceNameA> -e <serviceNameB> -e <serviceNameC> |
awk '{print $2}' | xargs sudo kill -9

Erläuterung aus der Dokumenation:

ps wird eine Kopfzeile angezeigt, gefolgt von Zeilen mit Informationen über alle Ihre Prozesse, die Terminals steuern.

-e Informationen über die Prozesse anderer Benutzer anzeigen, einschließlich derer

-f Anzeige von uid, pid, übergeordneter pid, aktueller CPU-Auslastung, Prozessstart

El grep durchsucht eine beliebige Eingabedatei und wählt Zeilen aus, die

-e Muster, --regexp=Muster Angabe eines Musters, das bei der Suche in der Eingabe verwendet wird: eine Eingabe Zeile wird ausgewählt, wenn sie mit einem der angegebenen Muster übereinstimmt. Diese Option ist besonders nützlich, wenn mehrere -e Optionen verwendet werden, um um mehrere Muster anzugeben, oder wenn ein Muster mit einem Bindestrich beginnt (`-').

xargs - Argumentliste(n) konstruieren und Dienstprogramm ausführen

töten - einen Prozess zu beenden oder zu signalisieren

Nummer 9 Signal - KILL (nicht fangbarer, nicht ignorierbarer Kill)

Beispiel :

ps -ef  | grep -e node -e loggerUploadService.sh -e applicationService.js |
awk '{print $2}' | xargs sudo kill -9

7voto

Alexander Kjäll Punkte 4122

Sie können es mit awk und Backtics machen

ps auxf |grep 'python csp_build.py'|`awk '{ print "kill " $2 }'`

$2 in awk gibt Spalte 2 aus, und Backtics führt die ausgegebene Anweisung aus.

Aber eine viel sauberere Lösung wäre, wenn der Python-Prozess seine Prozess-ID in /var/run speichern würde und man dann einfach diese Datei lesen und den Prozess beenden könnte.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X