Elimine los procesos que no responden por su nombre pero conserve los procesos que responden

Elimine los procesos que no responden por su nombre pero conserve los procesos que responden

Por alguna razón, termino con unos cuantos procesos auxiliares de Google Chrome que dejan de responder, acaparando recursos de la CPU. Por lo general, simplemente ejecuto killall Google\ Chrome\ Helper, sin embargo, esto mata todo, incluidos los procesos de respuesta, lo que significa que tengo que reiniciar Chrome.

¿Existe una marca para killallque solo afecte a los procesos que no responden?

Respuesta1

Una forma de hacerlo es utilizar toppara encontrar el pid del proceso que utiliza la mayor cantidad de CPU. Comencé un acaparador de CPU bash en una terminal:

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

Luego en otra terminal puedo matarlo de la siguiente manera:

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

Tenga en cuenta que ya que esto es, esta es la topversión BSD y no la GNU.

  • -l2le dice a top que se ejecute durante 2 iteraciones; la primera debe ignorarse ya que solo informa 0% de CPU para todos los procesos.
  • Los grepfiltros solo las líneas bash. Tenga en cuenta que esto puede necesitar más trabajo si su expresión grep coincide con otras partes de la topsalida.
  • sortordena la salida numéricamente a la inversa por la tercera columna (% de CPU)
  • headobtiene la primera línea (CPU más alta)
  • cutobtiene la primera columna (PID)
  • Lo anterior se ejecuta en una $()sustitución de comando, y el PID numérico simplemente se pasa directamente akill

En máquinas GNU/Linux el equivalente es:

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

información relacionada