Elimine processos que não respondem pelo nome, mas preserve processos responsivos

Elimine processos que não respondem pelo nome, mas preserve processos responsivos

Por alguma razão, acabo com alguns processos do Google Chrome Helper que param de responder, consumindo recursos da CPU. Normalmente eu apenas executo o killall Google\ Chrome\ Helper, mas isso mata tudo, incluindo os processos responsivos, o que significa que preciso reiniciar o Chrome.

Existe um sinalizador para killallque isso afete apenas processos que não respondem?

Responder1

Uma maneira de fazer isso é encontrar topo pid do processo que usa mais CPU. Eu comecei um bash CPU em um terminal:

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

Então, em outro terminal, posso matá-lo da seguinte maneira:

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

Observe que, como isso é, este é o BSD tope não a versão GNU.

  • -l2diz ao top para executar 2 iterações - a primeira precisa ser ignorada, pois apenas informa 0% da CPU para todos os processos.
  • Os grepfiltros apenas as linhas do bash. Observe que isso pode precisar de mais trabalho se sua expressão grep corresponder a qualquer outra parte da topsaída.
  • sortclassifica a saída numericamente ao contrário pela 3ª coluna (CPU%)
  • headobtém a primeira linha (CPU mais alta)
  • cutobtém a primeira coluna (PID)
  • O procedimento acima é executado em uma $()substituição de comando, e o PID numérico é passado diretamente parakill

Em máquinas GNU/Linux o equivalente é:

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

informação relacionada