Después de que mi script bash se realiza con el servidor de selenio, el script lo mata así:
kill `ps -ef | grep selenium | awk '{ print $2 }'`
Si bien esto funciona y mata el script de selenio, también trata de matar el proceso de grep selenium
modo que cuando el número de proceso vuelve al comando kill, el proceso se ha ido, por lo que termina generando un mensaje de error. (En otras palabras: termina matando dos procesos, uno de ellos es el servidor de selenio real, el otro es un proceso fugaz que es un efecto secundario de cómo estoy haciendo este comando).
¿Hay alguna forma más elegante de matar el proceso, que no tenga este efecto secundario no deseado?
(FWIW una idea que tenía: este mismo script inicia selenio antes en el script, así que tal vez si hubiera una forma de capturar el PID cuando inicie selenio, podría mantenerlo y matarlo directamente, en lugar de buscar el ID del proceso. El problema es que no sé cómo obtener ese PID, cómo usar una variable para mantenerlo y cómo hacer referencia a él más adelante en el script. Pero, ¿es esa una mejor manera de hacerlo?)
Pruebe el
pgrep
comando, que generará el PID del comando que le interesa.Para matar realmente el proceso, use el
pkill
comando complementario .fuente
pgrep java
y funciona :-) ¡gracias!pgrep -f selenium
debería funcionarpkill
es mucho más simple.pkill
utiliza exactamente los mismos criterios de coincidencia quepgrep
, por lo que puede hacer esto en 1 comando en lugar de 2 (y tener que confiar en la salida de uno).Intenta usar
grep [s]elenium
. Esto no encontrará el proceso grep.fuente
grep
utiliza BRE de forma predeterminada. Es decir,[
y]
se muestran enargv
paragrep
, pero no coincide debido[
y]
no están siendo utilizados por literalmentegrep
.| grep -v grep
componente en la tubería. ¡Pero esto es bastante elegante y me gusta!ps -ef | grep \[s]elenium
. Aunque encontrélsof
que era una alternativa mucho mejor para usarps
ygrep
.El
killall
comando no se ha mencionado, y creo que es una adición útil al repertorio.También puede usar la
-r regex
opción para especificar una expresión regular que coincida con el nombre del proceso e incluso un valor de tiempo:Mata todos los procesos de selenio anteriores a 5 minutos.
fuente
killall
Use el
-m 1
interruptor con el comando grep para obtener solo el primer proceso encontrado. Siempre que ordene sus procesos por PID, ascendente, funcionará.fuente