Como filtrar e matar alguns processos java usando terminal?

2

Eu tenho o comando ps aux | grep -v 'grep' | grep "java" | awk '{print }' que pode filtrar todos os processos Java, mas o problema que tenho é que eu quero selecionar apenas o processo cujo nome contém core ou nimbus . Existem outros processos Java, como eclipse e servidor de e-mail, que estão sendo executados ao mesmo tempo e não quero que eles estejam lá.

Eu verifiquei de Mate os processos Java .

Eu sou novo no script, então, por favor, me perdoe se a pergunta for boba. Obrigado!

    
por amit_kumar 01.10.2015 / 17:39

3 respostas

7
pkill -f 'java.*(core|nimbus)'

Eu não tenho uma configuração Java como a sua, mas executo uma grande quantidade de aplicativos Django no meu servidor. Situação semelhante em que todos eles se parecem com processos UWSGI. Aqui está um pedaço de ps aux | grep uwsgi :

oli       7201  0.0  1.0  70324 20936 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/asvsforms/uwsgi.ini
oli       7202  0.0  1.0  70336 20956 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/bnc/uwsgi.ini
oli       7203  0.0  1.0  70456 21016 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini
oli       7204  0.0  1.0  70272 21068 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/emwill/uwsgi.ini
oli       7205  0.0  1.3  88336 28124 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/qi/uwsgi.ini
oli       7206  0.0  1.0  70256 20996 ?        S    12:54   0:00 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/sbaccuracy/uwsgi.ini

Você pode awk disso (você não precisa de grep e awk ), mas dê uma olhada em pgrep !

$ pgrep -af 'uwsgi.*cleanup'
7203 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini
7217 /web/venv/bin/uwsgi --include /web/django-uwsgi.ini --ini /web/cleanup/uwsgi.ini

É o -f que é realmente necessário aqui. Isso expande a pesquisa de padrões para toda a linha de comando usada para executar algo. Sem isso, só estaria procurando a primeira parte. O -a está aqui apenas para produzir a linha completa.

De qualquer forma, para matar isso, apenas mudamos para pkill , que é praticamente o mesmo comando. Ele não possui os mesmos recursos de saída, mas não é para isso que foi projetado. E isso nos leva de volta ao topo da resposta.

Se você insistir em filtrar ps , não use ps|grep|grep|awk|egrep|awk|xargs kill ou o que quer que tenha sido sugerido. Isso só parece bobo. Um único awk pode fazer toda a filtragem .

ps aux | awk '/java.*(core|nimbus)/ {print }'

Além disso, você pode enviar a lista para eliminar diretamente em awk :

ps aux | awk '/java.*(core|nimbus)/ {print  | kill}'

Eu ainda escolheria pgrep e pkill .

    
por Oli 01.10.2015 / 17:52
-1

Quase lá. Para selecionar os processos, você pode fazer isso:

ps aux | grep -v 'grep' | grep "java" |egrep -E "core|nimbus"

E quando isso der os processos de que você precisa, você poderá matá-los de uma só vez:

ps aux | grep -v 'grep' | grep "java" | egrep -E "core|nimbus" | awk '{print }' |xargs -n 1 kill

    
por Maarten 01.10.2015 / 17:53
-1

Quase lá! Tente isto: ps aux | grep -v 'grep' | grep "java" | awk '/core/ || /nimbus/ {print ;}'

Você pode então matar os processos fazendo algo como @Maarten postado, abaixo, ou isto:

kill -9 'ps aux | grep -v 'grep' | grep "java" | awk '/core/ || /nimbus/ {print ;}''

    
por Piotrek 01.10.2015 / 17:48