Wenn Sie mehr Flexibilität bei der Auswahl der Prozesse benötigen, verwenden Sie
for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do
kill -9 $KILLPID;
done
Sie können grep -e usw. verwenden.
Alle Prozesse beenden, die mit der Zeichenfolge „myProcessName“ übereinstimmen:
ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
Quelle:http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9
Warum "ps pipe kill" vom Terminal aus böse ist:
Das Piping von Ganzzahlen, das Sie aus ps -ef
geschabt haben bis kill -9
ist schlecht, und Sie sollten sich doppelt schlecht fühlen, wenn Sie root oder ein Benutzer mit erhöhten Rechten sind, weil es Ihrem Prozess nicht die Möglichkeit gibt, Socket-Verbindungen sauber zu beenden, temporäre Dateien zu bereinigen, seine Kinder darüber zu informieren verschwindet oder setzt seine Terminaleigenschaften zurück.
Senden Sie stattdessen 15 und warten Sie ein oder zwei Sekunden, und wenn das nicht funktioniert, senden Sie 2, und wenn das nicht funktioniert, senden Sie 1. Wenn dies nicht der Fall ist, ENTFERNEN SIE DIE BINÄRE, da sich das Programm schlecht benommen hat.
Grundsätzlich verzichten wir beim Heckenschnitt auf Unix Railgun. https://porkmail.org/era/unix/award.html#kill
Erklärung des obigen Befehls:
ps -ef
erzeugt eine Liste von Prozess-IDs auf dem Computer, die für diesen Benutzer sichtbar sind. Die Pipe grep filtert das nach Zeilen, die diese Zeichenfolge enthalten. Die grep -v grep
sagt, passen Sie nicht auf den Prozess selbst, der das Grepping durchführt. Die Pipe awk print sagt, dass die Zeilen auf Standard-Trennzeichen-Leerzeichen aufgeteilt und in die zweite Spalte gefiltert werden, die unsere Prozess-ID ist. Die Pipe xargs startet einen neuen Prozess, um all diese PIDs an kill -9
zu senden , beendet sie alle.
Warum ps pipe kill
ist schlecht, gefährlich, hässlich und hackish:
-
Es besteht die geringe Möglichkeit, dass Sie versehentlich das Betriebssystem beenden oder 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 die Prozess-ID in der Zeit zwischen Lesen und Ausführen von kill -9 in etwas anderes geändert hat, und jetzt haben Sie etwas zufällig beendet notwendiger Prozess, der nichts mit Ihrem zu tun hat. -
Wenn der Code, der zwangsweise beendet wird, Datenbankoperationen oder sichere Transaktionen mit Race-Conditions mit geringer Wahrscheinlichkeit durchführt, wird die Atomarität dieser Transaktion in einem Bruchteil eines Prozents der Zeit zerstört, was zu undefiniertem Verhalten führt. kill -9 nimmt keine Gefangenen. Wenn Ihr Code diesbezüglich empfindlich ist, versuchen Sie,
xargs kill
zu ersetzen Teil mit einem übertragenen Flag, das ein ordnungsgemäßes Herunterfahren anfordert, und nur wenn diese Anforderung abgelehnt wird, letzter Ausweg zukill -9
Aber Wenn Sie alle Risiken verstehen und sie mit eindeutigen Namen kontrollieren, und Sie mit ein paar abgebrochenen Transaktionen oder gelegentlicher Korruption einverstanden sind, dann wird es Ihnen in 99,9 % der Fälle gut gehen. Wenn es ein Problem gibt, starten Sie den Computer neu und stellen Sie sicher, dass es keine Prozesskollisionen gibt. Aufgrund von Code wie diesem wird das Tech-Support-Skript „Haben Sie versucht, Ihren Computer neu zu starten“ zu einem Level-5-Mem. "Ein Rogue Robot hat ps
abgekratzt Ganzzahlen zu finden und diese an kill -9
zu senden , starten Sie den Computer neu, um das Problem zu beheben.
Warum nicht einfach pkill
verwenden was ist einfacher?
Das Obige gibt mir die manuelle Kontrolle, weil ps
, grep
, awk
, kill
und xargs
sind Multi-Plattform-Standard. Es gibt die volle Kontrolle darüber, welche Regex-Engine verwendet werden soll, welcher Teil des Prozessnamens abgeglichen werden soll, Groß-/Kleinschreibung und Ausnahmemanagement.
pkill -f -e -c myProcessName
Macht das gleiche für mich, aber siehe man pkill
hat unterschiedliche Verhaltensweisen, Flags und Regex-Engines zwischen Varianten von Linux, Mac, Zune-Bash und meinem Opensource-Router. Also ja, geben Sie Ihre 35000 Watt Unix-Railgun in die fähigen Hände von pkill, um die Hecken zu schneiden. Sehen Sie, was passiert.
Verwenden Sie pkill -f
, das mit dem Muster für jeden Teil der Befehlszeile übereinstimmt
pkill -f my_pattern
Falls es nicht funktioniert, versuchen Sie es auch mit diesem:
pkill -9 -f my_pattern