En mi servidor local, se están ejecutando muchos procesos de Java, y al mismo tiempo estoy usando Eclipse. Ahora, cuando necesito reiniciar mis procesos (inicio procesos a través de un script de shell), antes de cada inicio, necesito eliminar los procesos antiguos a través de:
Método 1: -
kill -9 $Pid
(para cada proceso, uno por uno, lo que lleva mucho tiempo)
Método 2: -
killall -9 java
(para todos los procesos: fácil, pero Eclipse se eliminará de forma innecesaria)
En el caso del Método 2, Eclipse también será asesinado, lo que nunca quiero. ¿Hay alguna forma de salir de esto? Apuesto a que debe haber: P
Editar: estoy usando ubuntu 15.04.
command-line
process
Atiq
fuente
fuente
Respuestas:
Prueba este comando:
esto buscará todos los procesos que contengan Java y excluya el eclipse y luego los matará
fuente
-9
indiscriminadamente. Deberías darle a un proceso la oportunidad de salir con gracia.pgrep
es mejor que deps | grep
lo contrario te arriesgas a matar la declaración grep en sí.pgrep
que no puede distinguir qué procesos están ejecutando eclipse, porque inclusopgrep -l
solo informarájava
. @ Maythux, solo como referencia,egrep
está en desuso y no debe usarse, ya quegrep -E
hace exactamente lo mismo, aunque ni siquiera lo necesitagrep -E
ya que está haciendo coincidir una cadena fija; por lo que sólogrep -v "eclipse"
(o si se quiere ser de lujo[...] | grep -F "java" | grep -vF "eclipse | [...]"
)pkill '/java\(.*eclipse\)\@!'
\@!
? Si eso es un Perl-ismo, no funcionará, ya quepkill
solo admite ERE, he intentado reducir toda esta tarea a un solo comando que ya se usapkill
con miradas negativas y que falló por esta razón.Utilizando
awk
El comando mata todos los
java
procesos, pero no el procesoeclipse
.fuente
Qué tal si :
pgrep -af 'java'
buscajava
en la línea de comando completa de los procesos y los enumeragrep -Po '^[^ ]+(?!.*eclipse)'
busca entre los procesos buscados y obtiene los ID de proceso de los procesos que no tieneneclipse
en sus líneas de comando completasxargs kill
matará los procesos.fuente
pkill
solución aún más eficiente (solo un comandopgrep/pkill
:) si se admitiera perl regex'es que utiliza en el segundo paso anterior. Desafortunadamentepgrep
/pkill
solo admite expresiones regulares extendidas (comoegrep/grep -E
).pgrep
/pkill
apoya PCRE ..jps -m | grep -v eclipse | awk '{print $1}' | xargs -t kill
Use jps para asegurarse de que está buscando solo los comandos de Java y no todos los comandos que tienen Java en su camino.
fuente
fuente