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 seleniummodo 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
pgrepcomando, que generará el PID del comando que le interesa.Para matar realmente el proceso, use el
pkillcomando complementario .fuente
pgrep javay funciona :-) ¡gracias!pgrep -f seleniumdebería funcionarpkilles mucho más simple.pkillutiliza 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
greputiliza BRE de forma predeterminada. Es decir,[y]se muestran enargvparagrep, pero no coincide debido[y]no están siendo utilizados por literalmentegrep.| grep -v grepcomponente en la tubería. ¡Pero esto es bastante elegante y me gusta!ps -ef | grep \[s]elenium. Aunque encontrélsofque era una alternativa mucho mejor para usarpsygrep.El
killallcomando no se ha mencionado, y creo que es una adición útil al repertorio.También puede usar la
-r regexopció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
killallUse el
-m 1interruptor con el comando grep para obtener solo el primer proceso encontrado. Siempre que ordene sus procesos por PID, ascendente, funcionará.fuente