maneira graciosa para matar processo

12

Depois que meu script é feito com o servidor de selênio, o script mata assim:

kill 'ps -ef | grep selenium | awk '{ print $2 }''

Enquanto isso funciona e mata o script selenium, ele também tenta matar o processo para grep selenium . Então, quando o número do processo retorna ao comando kill, o processo se foi, então ele acaba gerando um mensagem de erro. (Em outras palavras: ele acaba matando dois processos, um deles é o verdadeiro servidor de selênio, o outro é um processo fugaz que é um efeito colateral de como eu estou fazendo esse comando.)

Existe uma maneira mais elegante de matar o processo, que não tem esse efeito colateral indesejado?

(FWIW uma idéia que eu tive: esse mesmo script inicializa o selênio anteriormente no script, então talvez se houvesse uma maneira de capturar o PID quando eu iniciasse o selênio, eu poderia manter isso e matá-lo diretamente, em vez disso de grepping para o ID do processo.O problema é, eu não sei como obter esse PID, como usar uma variável para mantê-lo e como referenciá-lo mais tarde no script.Mas é uma maneira melhor de fazê-lo ?)

    
por Eric 29.02.2012 / 04:38

5 respostas

12

Tente usar pkill selenium se nem isso, nem um dos outros funcionar, você pode continuar usando seu método com outra sequência de pipe, como

kill 'ps -ef|grep -i selenium| grep -v grep| awk '{print $2}''
    
por 29.02.2012 / 05:24
20

Experimente o comando pgrep , que produzirá o PID do comando em que você está interessado.

pgrep selenium

Para realmente eliminar o processo, use o comando pkill do companheiro.

pkill selenium
    
por 29.02.2012 / 05:01
7

Tente usar grep [s]elenium . Isso não encontrará o processo grep.

    
por 29.02.2012 / 05:15
2

O comando killall não foi mencionado e sinto que é uma adição útil ao repertório.

$ killall selenium

Você também pode usar a opção -r regex para especificar uma expressão regular para corresponder ao nome do processo e até mesmo um valor de hora:

$ killall -o 5m selenium 

Mata todos os processos de selênio com mais de 5 minutos.

    
por 01.03.2012 / 01:52
0

Use a opção -m 1 com o comando grep para buscar apenas o primeiro processo encontrado. Contanto que você classifique seus processos por PID, ascendente, isso funcionará.

    
por 29.02.2012 / 04:58