Como matar todos os processos além de um específico

13

No meu servidor local, muitos processos Java estão em execução e, ao mesmo tempo, estou usando o Eclipse. Agora, quando eu preciso reiniciar meus processos (eu inicio os processos através de um script de shell), antes de cada início eu preciso matar os processos antigos através de:

Método 1: - kill -9 $Pid (para cada processo, um por um, o que consome tempo)

Método 2: - killall -9 java (para todos os processos - fácil, mas o Eclipse será morto desnecessariamente)

No caso do Método 2, o Eclipse também será eliminado, o que eu nunca quero. Existe alguma maneira de sair disso? Aposto que deve haver: P

Edit: Estou usando o Ubuntu 15.04.

    
por Atiq 24.07.2015 / 12:17

5 respostas

17

Dê uma olhada nesse comando:

ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill

isto irá procurar por todos os processos que contenham java e eclipse execluding, em seguida, matá-los

    
por Maythux 24.07.2015 / 12:22
12

Usando awk

ps ax | awk '/java/ && !/eclipse/ {system("kill ")}'

O comando elimina todos os java processos, mas não o processo eclipse .

    
por A.B. 24.07.2015 / 13:21
1

Que tal:

pgrep -af 'java' | grep -Po '^[^ ]+(?!.*eclipse)' | xargs kill
  • pgrep -af 'java' procura java na linha de comando completa dos processos e lista-os

  • grep -Po '^[^ ]+(?!.*eclipse)' procura entre os processos pesquisados e obtém os IDs do processo dos processos que não têm eclipse em suas linhas de comando completas

  • xargs kill eliminará os processos.

por heemayl 24.07.2015 / 21:28
0

jps -m | grep -v eclipse | awk '{print }' | xargs -t kill

Use jps para ter certeza de que você está procurando apenas os comandos java e não todos os comandos que possuem java em seu caminho.

    
por Chetan Narsude 24.07.2015 / 20:43
0
ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill
    
por Ankur Kumar 25.07.2015 / 02:00