Detectando se um servidor está carregado

3

Eu tenho que iniciar algum teste de desempenho em uma caixa Rhel 6, mas antes de iniciar o teste, eu tenho que ter certeza de que não há outros processos Java em execução.

A maneira manual de fazer isso seria usar "ps -ef | grep java"

Mas, como esse teste será automatizado, preciso de uma maneira de detectá-lo programaticamente e de matar todos eles.

Existe alguma maneira de fazer isso?

    
por Chander Shivdasani 24.01.2012 / 20:19

3 respostas

5

Que tal ...?

pkill java

pkill(1) (também killall(1) no Linux) funciona como kill(1) , mas envia o sinal para todos os processos com o (s) nome (s) especificado (s), e não PIDs. Existem outras formas de combinar processos também - verifique a man page!

Na verdade, especificamente porque estamos falando de Java, eu faria o seguinte para automatizar as coisas corretamente:

pgrep java >/dev/null && (pkill java; sleep 5)
pgrep java >/dev/null && (pkill -9 java; sleep 5)
if pgrep java >/dev/null; then
    echo "Whoops, java processes still running. Bailing out."
    exit 1
fi

Isto irá verificar se algum processo java está sendo executado, enviará o sinal SIGTERM e aguardará 5 segundos. Se ainda houver processos em execução, ele enviará o sinal SIGKILL e esperará outros 5 segundos. Se houver processos ainda em execução, ele interromperá a execução do script retornando um código de saída de 1.

Atualização: alterou a resposta para usar pgrep(1) e pkill(1) em vez de pidof(1) e killall(1) .

    
por 24.01.2012 / 21:06
6

Deve ser muito simples com o pkill:

pkill java
    
por 24.01.2012 / 21:07
0

Primeiro, grave a saída de ps -ef | grep java em um arquivo chamado "filename" então crie um arquivo Python:

import os

f = open('filename',r')'
for i in f:
    a = i.split()
    b= "kill "
    b=b+str(a[1])
    os.system(b)

Execute-o com python pythonfilename.py e seus programas Java serão finalizados.

    
por 24.01.2012 / 20:48