GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann man alle Prozesse mit einem bestimmten Teilnamen beenden?

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:

  1. 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.

  2. 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 zu kill -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

Linux
  1. Wie kann man einen untergeordneten Prozess nach einem bestimmten Timeout in Bash beenden?

  2. Wie beendet man alle Hintergrundprozesse in zsh?

  3. So beenden Sie alle PHP-FPM-Prozesse in einer einzigen Befehlszeile

  4. So beenden Sie alle von pgrep zurückgegebenen Prozesse

  5. Wie beende ich alle Prozesse eines Benutzers mit seiner UID?

So beenden Sie einen Prozess in Linux

So beenden Sie Zombie-Prozesse in Linux

So finden und beenden Sie einen Prozess mit einem Linux-Terminal

So töten Sie Zombie-Prozesse in Ubuntu 20.04 LTS

So töten Sie Zombie-Prozesse in Ubuntu

So beenden Sie Prozesse in Linux mit kill, killall und pkill