Nicht reagierende Prozesse anhand des Namens beenden, aber reagierende Prozesse beibehalten

Nicht reagierende Prozesse anhand des Namens beenden, aber reagierende Prozesse beibehalten

Aus irgendeinem Grund habe ich ziemlich viele Google Chrome-Hilfsprozesse, die nicht mehr reagieren und CPU-Ressourcen beanspruchen. Normalerweise führe ich einfach aus killall Google\ Chrome\ Helper, aber das beendet alle, einschließlich der reagierenden Prozesse, was bedeutet, dass ich Chrome neu starten muss.

Gibt es ein Flag, killallsodass nur nicht reagierende Prozesse betroffen sind?

Antwort1

Eine Möglichkeit besteht darin, topdie PID des Prozesses zu ermitteln, der die meiste CPU verwendet. Ich habe in einem Terminal eine Bash-CPU-Schweineroutine gestartet:

bash -c "while true; do :; done"

Dann kann ich es in einem anderen Terminal wie folgt beenden:

kill $( top -l2 | grep bash | sort -nrk3 | awk '{print $1;exit}' )

Beachten Sie, da dies, dies ist die BSD- topund nicht die GNU-Version.

  • -l2weist top an, zwei Iterationen lang zu laufen – die erste muss ignoriert werden, da sie einfach 0 % CPU für alle Prozesse meldet.
  • Die grepFilter beschränken sich auf die Bash-Zeilen. Beachten Sie, dass dies möglicherweise mehr Arbeit erfordert, wenn Ihr Grep-Ausdruck mit anderen Teilen der topAusgabe übereinstimmt.
  • sortsortiert die Ausgabe numerisch umgekehrt nach der 3. Spalte (CPU %)
  • headerhält die erste Zeile (höchste CPU)
  • cuterhält die erste Spalte (PID)
  • Das obige wird in einer $()Befehlssubstitution ausgeführt, und die numerische PID wird direkt ankill

Auf GNU/Linux-Rechnern lautet das Äquivalent:

kill $(top -bn1 | grep bash | sort -nrk9 | awk '{print $1;exit}')

verwandte Informationen