No meu servidor local, muitos processos java estão em execução e, ao mesmo tempo, estou usando o Eclipse. Agora, quando preciso reiniciar meus processos (inicio processos por meio de um script de shell), antes de cada início, preciso eliminar os processos antigos por meio de:
Método 1: -
kill -9 $Pid
(para cada processo, um por um, que consome tempo)
Método 2: -
killall -9 java
(para todos os processos - fácil, mas o Eclipse será eliminado desnecessariamente)
No caso do método 2, o Eclipse também será morto, o que eu nunca quero. Existe alguma maneira de sair disso? Aposto que deve haver: P
Edit: eu estou usando o ubuntu 15.04.
command-line
process
Atiq
fonte
fonte
Respostas:
Tente este comando:
isso procurará por todos os processos que contenham java e eclipse execluso e depois os matará
fonte
-9
indiscriminadamente. Você deve sempre dar a um processo a chance de sair normalmente.pgrep
é melhor dops | grep
que você corre o risco de matar a própria declaração grep.pgrep
você não é capaz de distinguir quais processos estão executando o eclipse, porque atépgrep -l
o relatório será apenasjava
. @ Maythux, apenas para referência,egrep
está obsoleto e não deve ser usado, poisgrep -E
faz exatamente o mesmo, embora você nem precise,grep -E
pois está combinando uma string fixa; por isso sógrep -v "eclipse"
(ou se você quiser ser chique[...] | grep -F "java" | grep -vF "eclipse | [...]"
)pkill '/java\(.*eclipse\)\@!'
\@!
? Se esse é um Perl-ism, não vai funcionar, porquepkill
suporta apenas EREs, tentei reduzir toda essa tarefa a um único comando já usadopkill
com lookaheads negativos e que falhou por esse motivo.Usando
awk
O comando mata todos os
java
processos, mas não o processoeclipse
.fonte
E se :
pgrep -af 'java'
procurajava
na linha de comando completa dos processos e lista-osgrep -Po '^[^ ]+(?!.*eclipse)'
procura entre os processos pesquisados e obtém os IDs dos processos que não possuemeclipse
em suas linhas de comando completasxargs kill
matará os processos.fonte
pkill
solução ainda mais eficiente (apenas um comandopgrep/pkill
:) se suportada pelo perl regex'es que você usa na 2ª etapa acima. Infelizmentepgrep
/pkill
apenas suporta regexps estendidos (comoegrep/grep -E
).pgrep
/pkill
suportes PCRE ..jps -m | grep -v eclipse | awk '{print $1}' | xargs -t kill
Use jps para garantir que você esteja procurando apenas os comandos java e não todos os comandos que possuem java no caminho.
fonte
fonte