Normalmente ejecuto pocas aplicaciones Java, una para el servidor que se ejecuta localmente y otra para algunos IDE como NetBeans. Y de vez en cuando, después de muchas implementaciones, mi servidor se atasca en OutOfMemoryException, así que necesito eliminar el proceso de Java para reiniciar.
Entonces lo hago, pkill -9 java
pero esto también mata mi IDE en ejecución, lo que no quiero. Entonces, ¿cómo elimino solo las aplicaciones vinculadas al servidor en ejecución y no las otras? Supongo que todas se ejecutan bajo el mismo proceso, pero tiene que haber alguna forma de disuadirlas.
top
ops
) y elige la correcta y mátala por PID (kill -9 PID_number).PID
. Muchas graciasRespuestas:
Para matar un proceso que está asociado con múltiples procesos, debe matarlo utilizando la identificación de proceso asociada con ese proceso.
Para obtener la identificación del proceso de ese proceso de Java, ejecute
La salida de este comando dará la lista de procesos de Java que se ejecutan en su sistema. Anote la ID de proceso (PID) de ese proceso a quien desea matar y ejecutar
fuente
ps ax | grep java | grep -v 'grep' | cut -d '?' -f1 | xargs kill -9
OMI, la mejor solución es:
fuente
ps -fC java
encontrarnameOfYourJavaAplication
(en-Dprogram.name
)En lugar de usar
ps
ygrep
, puede usarps
la-C
bandera de 's para seleccionar todos los comandos listados con el nombre' java '. Es posible que también desee utilizarps
la-f
bandera de '' para imprimir el nombre completo del comando de cada proceso de la lista. De esa manera, puede ver lo que cada proceso de Java está haciendo realmente. Este es el comando en su totalidad:ps -fC java
.También puede usar
pgrep
para enumerar todos los procesos de Java.pgrep -a java
devolverá el PID y la línea de comando completa de cada proceso de Java.Una vez que tenga el PID del comando que desea matar, úselo
kill
con la-9
bandera (SIGKILL) y el PID del proceso de Java que desea matar. Java no siempre se detiene cuando recibe una señal 'SIGTERM' (los procesos pueden manejar 'SIGTERM'), por lo que a menudo es necesario enviarle la señal 'SIGKILL', que hace que init elimine el programa sin advertirlo primero.Por ejemplo, si
ps -fC java
devuelveo
psgrep -a java
vuelvey deseas matar
java TestProgram
, deberías correrkill -9 11775
.fuente
Si desea que un script encuentre y elimine su programa en ejecución (específico) utilizando un patrón de la línea de comando del programa (y no solo cada cosa de Java que se está ejecutando), entonces:
Desde /unix//a/31111/249209
fuente
jps
yjcmd
son herramientas especializadas en mostrar solo información de procesos Java y PID.Puede explorar sus opciones para obtener una salida más detallada.
fuente
Aquí hay un script que se puede usar para automatizar el proceso.
Reemplace la
<PROCESS_NAME>
parte con lo que sea que Java esté ejecutando.Nota: no puse el
-9
. No debería ser requerido a menos que capture señales ySIGTERM
(el valor predeterminado) falle. También te sugiero que uses el nombre de la señal que hace que sea más fácil de leer:ADVERTENCIA
Antes de ejecutar,
kill ...
asegúrese de que la$process
variable se establece como se esperaba. Elps -ef
puede ser diferente entre Unices, por lo que esawk
posible que necesite imprimir un parámetro diferente.Nota
El
<PROCESS_NAME>
podría ser cambiado a una variable. Solo recuerde que si tiene que escribirlo en su línea de comando cada vez, es probable que cometa errores de vez en cuando. Me resulta más fácil tener una copia múltiple del script con el nombre correcto.También importante: observe las comillas simples para el
awk
guión. Eso significa que debe cerrar y volver a abrir la cadena con la variable en el medio. Algo como esto debería funcionar (no probado):fuente