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
-9indiscriminadamente. Deberías darle a un proceso la oportunidad de salir con gracia.pgrepes mejor que deps | greplo contrario te arriesgas a matar la declaración grep en sí.pgrepque no puede distinguir qué procesos están ejecutando eclipse, porque inclusopgrep -lsolo informarájava. @ Maythux, solo como referencia,egrepestá en desuso y no debe usarse, ya quegrep -Ehace exactamente lo mismo, aunque ni siquiera lo necesitagrep -Eya 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 quepkillsolo admite ERE, he intentado reducir toda esta tarea a un solo comando que ya se usapkillcon miradas negativas y que falló por esta razón.Utilizando
awkEl comando mata todos los
javaprocesos, pero no el procesoeclipse.fuente
Qué tal si :
pgrep -af 'java'buscajavaen 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 tieneneclipseen sus líneas de comando completasxargs killmatará los procesos.fuente
pkillsolución aún más eficiente (solo un comandopgrep/pkill:) si se admitiera perl regex'es que utiliza en el segundo paso anterior. Desafortunadamentepgrep/pkillsolo admite expresiones regulares extendidas (comoegrep/grep -E).pgrep/pkillapoya PCRE ..jps -m | grep -v eclipse | awk '{print $1}' | xargs -t killUse 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