Elimina o processo sem resposta pelo nome, mas preserva os processos responsivos

1

Por algum motivo, acabo com alguns processos do Google Chrome Helper que param de responder, sobrecarregando os recursos da CPU. Normalmente, apenas corro killall Google\ Chrome\ Helper , mas isso mata todos, inclusive os processos responsivos, o que significa que preciso reiniciar o Chrome.

Existe um sinalizador para killall , o que afeta apenas processos que não respondem?

    
por Benedict Lewis 10.10.2014 / 14:06

1 resposta

0

Uma maneira de fazer isso é usar top para encontrar o pid do processo usando a maior parte da CPU. Eu comecei um porco 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}' )

Note que, como isso é , esse é o BSD top e não a versão GNU.

  • -l2 diz ao top para correr por 2 iterações - o primeiro precisa ser ignorado, pois ele apenas reporta 0% de CPU para todos os processos.
  • O grep filtra apenas as linhas bash. Observe que isso pode precisar de mais trabalho se sua expressão grep corresponder a outras partes da saída top .
  • sort classifica a saída numericamente na ordem inversa pela terceira coluna (% da CPU)
  • head obtém a primeira linha (maior CPU)
  • cut obtém a primeira coluna (PID)
  • O texto acima é executado em uma substituição de comando $() e o PID numérico é passado diretamente para kill

Nas máquinas GNU / Linux, o equivalente é:

kill $(top -bn1 | grep bash | sort -nrk9 | awk '{print $1;exit}')
    
por 11.10.2014 / 00:29