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}''
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 ?)
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
Tente usar grep [s]elenium
. Isso não encontrará o processo grep.
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.
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á.