Mate processos Java

18

Estou trabalhando em um código computacionalmente pesado que - por enquanto - falha muito, mas ainda estou trabalhando nisso :) Quando ele falha, não consigo fechar a janela da GUI; Eu tenho que abrir um shell e matar o processo -9.

É um processo Java e é fácil de encontrar:

[email protected]:~$ ps aux | grep java
nkint   2705 16.6  1.0 460928 43680 ?        Sl   12:23   0:08 /usr/lib/jvm/java-6-sun-1.6.0.26/bin/java -Djava.library.path=something something
nkint   2809  0.0  0.0   4012   776 pts/0    S+   12:24   0:00 grep --color=auto java
[email protected]:~$ kill -9 2705

Agora é fácil, mas é uma tarefa bastante mecânica. Então, normalmente eu espero por cerca de 7-8 processos para travar e, em seguida, kill -9 de cada um deles.

Eu quero fazer isso de maneira automática. Eu acho que deve ser fácil canalizar alguns comandos para pegar o id dos resultados (n-1) de ps aux | grep java e matá-lo, mas eu não tenho idéia de por onde começar.

Alguém pode me dar alguma sugestão?

    
por nkint 11.12.2012 / 12:30

4 respostas

18

Mais alguns tubos vão te levar aonde você quer estar. Aqui está como eu faria:

search_terms='whatever will help find the specific process' 

kill $(ps aux | grep "$search_terms" | grep -v 'grep' | awk '{print }')

Veja o que está acontecendo:

grep -v 'grep' exclui o processo do grep dos resultados.

awk '{print }' imprime apenas a segunda coluna da saída (neste caso, o PID)

$(...) é a substituição de comando. Basicamente, o resultado do comando interno será usado como um argumento para kill

Isso tem o benefício de um controle melhor sobre o que é morto. Por exemplo, se você estiver em um sistema compartilhado, poderá editar os termos de pesquisa para que ele tente apenas matar seus próprios processos java.

    
por Dean 11.12.2012 / 19:49
35

Se você quiser matar todos os processos que são nomeados java , você pode usar o seguinte comando:

  

killall -9 java

Este comando envia sinais para processos identificados pelo seu nome.

    
por Milan Todorovic 11.12.2012 / 12:59
3

Abra um editor de texto e salve este pequeno script no seu diretório home como 'killjava'

#! /bin/bash

# Kill Java process

# Determine the pid
PID='ps -C java -o pid='

kill -9 $PID

Então chmod u+x ~/killjava em um terminal para que você possa executar o arquivo.

Então você pode apenas chamar ~/killjava de um terminal e seu processo Java estará morto. Você pode querer considerar quais outros recursos sua morte do processo Java dessa forma (como conexões de banco de dados) serão afetados. Por exemplo, talvez kill -15 seja mais apropriado - veja a explicação aqui .

    
por Clive van Hilten 11.12.2012 / 12:46
2

Aqui está uma abordagem alternativa, baseada na resposta anterior do @ Dean.

Isso usa jps para identificar o processo java.

kill $(jps | grep <MainClass> | awk '{print }')

MainClass é uma classe em seu programa java em execução que contém o método principal.

    
por Pawan 04.10.2016 / 20:27