Normalmente, executo alguns aplicativos Java, um para servidor executando localmente e outro para alguns IDE como o NetBeans. E, de tempos em tempos, após muitas reimplantações, meu servidor fica preso no OutOfMemoryException, por isso preciso interromper o processo Java para reiniciar.
Então eu faço, pkill -9 java
mas isso também mata meu IDE em execução, o que eu não quero. Então, como matar apenas aplicativos vinculados ao servidor em execução e não os outros? Suponho que todos eles estejam executando no mesmo processo, mas deve haver alguma maneira de distendê-los.
top
oups
) e escolha a correta e mate-a por PID (kill -9 PID_number).PID
. Muito obrigadoRespostas:
Para matar um processo que está associado a vários processos, você precisa matá-lo usando o ID do processo associado a esse processo.
Para obter a identificação do processo java, execute
A saída deste comando fornecerá a lista de processos java em execução no seu sistema. Anote o ID do processo (PID) do processo que você deseja matar e executar
fonte
ps ax | grep java | grep -v 'grep' | cut -d '?' -f1 | xargs kill -9
IMO, a melhor solução é:
fonte
ps -fC java
para encontrarnameOfYourJavaAplication
(em-Dprogram.name
)Em vez de usar
ps
egrep
, você pode usarps
o-C
sinalizador de 's para selecionar todos os comandos listados com o nome' java '. Você também pode usarps
o-f
sinalizador para imprimir o nome completo do comando de cada processo listado. Dessa forma, você pode ver o que cada processo java está realmente fazendo. Aqui está o comando na íntegra:ps -fC java
.Você também pode usar
pgrep
para listar todos os processos java.pgrep -a java
retornará o PID e a linha de comando completa de cada processo java.Depois de ter o PID do comando que deseja matar, use
kill
com a-9
bandeira (SIGKILL) e o PID do processo java que deseja matar. O Java nem sempre pára quando recebe um sinal 'SIGTERM' (os processos têm permissão para manipular 'SIGTERM'); portanto, é frequentemente necessário enviar o sinal 'SIGKILL', que faz o init matar o programa sem avisar primeiro.Por exemplo, se
ps -fC java
retornaou
psgrep -a java
retornae você deseja matar
java TestProgram
, você deve correrkill -9 11775
.fonte
Se você deseja que um script encontre e mate seu programa em execução (específico) usando um padrão da linha de comando do programa (e não apenas todas as coisas em java que você está executando), então:
De /unix//a/31111/249209
fonte
jps
ejcmd
são ferramentas especializadas em exibir apenas informações de processos Java e PIDs.Você pode explorar suas opções para obter uma saída mais detalhada.
fonte
Aqui está um script que se pode usar para automatizar o processo.
Substitua a
<PROCESS_NAME>
peça por qualquer java que esteja executando.Nota: Eu não coloquei o
-9
. Eu não deveria ser exigido, a menos que você capture sinais eSIGTERM
(o padrão) falhe. Eu também sugiro que você use o nome do sinal, o que facilita a leitura:ATENÇÃO
Antes de executar,
kill ...
verifique se a$process
variável é definida como esperado. Ops -ef
diferente pode entre Unices assimawk
ser necessário imprimir um parâmetro diferente.Nota
A
<PROCESS_NAME>
poderia ser modificada para uma variável. Lembre-se de que, se você precisar digitá-lo na linha de comando a cada vez, é provável que cometa erros de vez em quando. Acho mais fácil ter várias cópias do script com o nome correto.Também importante: observe as aspas simples para o
awk
script. Isso significa que você precisa fechar e reabrir a string com a variável no meio. Algo assim deve funcionar (não testado):fonte