Ich möchte alle Prozesse, an denen ich vorbeikomme, beenden:
ps aux | grep my_pattern
Wie kann man das tun?
Das funktioniert nicht:
pkill my_pattern
Ich möchte alle Prozesse, an denen ich vorbeikomme, beenden:
ps aux | grep my_pattern
Wie kann man das tun?
Das funktioniert nicht:
pkill my_pattern
ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
Warum "ps pipe kill" vom Terminal aus schlecht ist:
Das Piping von Ganzzahlen, die Sie aus ps -ef
à kill -9
ist schlecht, und Sie sollten sich schlecht fühlen, vor allem, wenn Sie Root oder ein Benutzer mit erhöhten Rechten sind, weil es Ihrem Prozess keine Chance gibt, Socket-Verbindungen sauber zu beenden, temporäre Dateien aufzuräumen, seine Kinder zu informieren, dass er weggeht oder seine Terminal-Eigenschaften zurückzusetzen.
Senden Sie stattdessen 15 und warten Sie ein oder zwei Sekunden, und wenn das nicht funktioniert nicht funktioniert, sende 2, und wenn das nicht funktioniert, sende 1. Wenn das nicht funktioniert, ENTFERNEN Sie die BINARY, denn das Programm verhält sich schlecht.
Grundsätzlich verwenden wir Unix Railgun nicht zum Schneiden der Hecken. https://porkmail.org/era/unix/award.html#kill
Erläuterung des obigen Befehls:
ps -ef
erzeugt eine Liste der Prozess-IDs auf dem Computer, die für diesen Benutzer sichtbar sind. Die Pipe grep filtert diese Liste nach Zeilen, die diese Zeichenfolge enthalten. Die grep -v grep
nicht mit dem Prozess selbst übereinstimmt, der das Grepping durchführt. Die Pipe awk print sagt, dass die Zeilen nach dem Standardtrennzeichen Whitespace aufgeteilt werden und nach der zweiten Spalte gefiltert wird, die unsere Prozess-ID ist. Die Pipe xargs startet einen neuen Prozess, um all diese Pid's zu senden kill -9
und beendet sie alle.
ps pipe kill
ist schlecht, gefährlich, hässlich und hakelig:Es besteht eine geringe Wahrscheinlichkeit, dass Sie versehentlich das Betriebssystem beenden oder ein undefiniertes Verhalten in einem nicht verwandten Prozess verursachen, was zu einer Instabilität des gesamten Systems führt, da ps -ef
listet Tausende von Prozessen auf, und Sie können nicht sicher sein, dass ein Prozess eines Drittanbieters Ihren Prozessnamen teilt, oder dass sich in der Zeit zwischen dem Lesen und dem Ausführen von kill -9 die processid in etwas anderes geändert hat und Sie nun einen zufälligen notwendigen Prozess beendet haben, der nichts mit Ihrem zu tun hat.
Wenn der Code, der zwangsweise beendet wird, Datenbankoperationen oder sichere Transaktionen mit wenig wahrscheinlichen Wettlaufbedingungen durchführt, wird in einem Bruchteil eines Prozents der Zeit die Atomizität dieser Transaktion zerstört, was zu undefiniertem Verhalten führt. kill -9 macht keine Gefangenen. Wenn Ihr Code dafür empfindlich ist, versuchen Sie, die xargs kill
Teil mit einem übermittelten Flag, das eine ordnungsgemäße Abschaltung anfordert, und nur wenn diese Anforderung verweigert wird, als letztes Mittel auf kill -9
Aber, Wenn Sie sich aller Risiken bewusst sind und sie mit eindeutigen Namen kontrollieren, und wenn Sie mit ein paar fehlgeschlagenen Transaktionen oder gelegentlicher Korruption zurechtkommen, dann werden Sie in 99,9 % der Fälle keine Probleme haben. Wenn es ein Problem gibt, starten Sie den Computer neu und stellen Sie sicher, dass es keine Prozesskollisionen gibt. Wegen Code wie diesem wird das Skript des technischen Supports erstellt: "Haben Sie versucht, Ihren Computer neu zu starten?" zu einem Meme der Stufe 5. "Ein Schurkenroboter kratzte ps
um ganze Zahlen zu finden, und schickte diese an kill -9
Starten Sie daher den Computer neu, um das Problem zu beheben.
pkill
was ist einfacher?Dies ermöglicht mir eine manuelle Kontrolle, denn ps
, grep
, awk
, kill
y xargs
sind plattformübergreifender Standard. Sie gibt die volle Kontrolle darüber, welche Regex-Engine zu verwenden ist, welcher Teil des Prozessnamens übereinstimmen soll, wie die Groß- und Kleinschreibung zu behandeln ist und wie die Ausnahmen zu verwalten sind.
pkill -f -e -c myProcessName
Macht bei mir das Gleiche, aber siehe man pkill
hat unterschiedliche Verhaltensweisen, Flags und Regex-Engines zwischen Varianten von Linux, Mac, Zune-Bash und meinem Open-Source-Router. Also ja, geben Sie Ihre 35000 Watt Unix-Railgun in die fähigen Hände von pkill, um die Hecken zu stutzen. Schauen Sie, was passiert.
Können Sie den folgenden Befehl verwenden, um den Prozess aufzulisten
ps aux | grep -c myProcessName
Wenn Sie den Zählerstand dieses Prozesses überprüfen müssen, führen Sie
ps aux | grep -c myProcessName |grep -v grep
Danach können Sie den Prozess mit
kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }')
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.