Inicio > Java, Linux > Seleccionar y matar un proceso java determinado

Seleccionar y matar un proceso java determinado

Jueves, 27 de Agosto de 2009 jarrarte Dejar un comentario Ir a comentarios

Imaginemos el siguiente escenario: tenemos un servidor linux con varios procesos java corriendo, y quedemos matar a uno de ellos sin afectar el resto. En este post veremos cómo generar un script de linux para matar un proceso seleccionado según la clase que contiene el método main.
Si utilizamos el comando killall:

killall -9 java

logramos parte de nuestro cometido (matar el proceso), pero seguramente nos traiga más problemas que soluciones, ya que matamos TODAS las máquinas virtuales java corriendo al momento de ejecutar el comando.

Podemos hacerlo de forma manual, haciendo un

ps -fea |grep java

para luego seleccionar el PID (process id) correspondiente a nuestro proceso, tomando en cuenta la clase que inicia el proceso, el classpath utilizado o los parámetros de inicio y luego invocando el comando kill -9 PID.

Si vamos a matar un cierto proceso java bastante seguido, podemos crearnos un shell script que se tome el trabajo de buscar el proceso y matar únicamente al que nosotros querramos.

A este script únicamente le debemos configurar la variable MAIN_CLASS, que contendrá el nombre de la clase que contiene el método main (clase que inicia nuestra aplicación). Basándose en éste nombre, el script buscará todos los procesos que contengan ese nombre en la línea de comandos, extraerá el PID de las líneas que filtró, y ejecutará un kill -9 para cada proceso.

El script entonces, es el siguiente:

#!/bin/bash
# Nombre del binario
MAIN_CLASS=com.josearrarte.demo.MainClass

# Cantidad de reintentos para matarlo
CNT_INTENTOS=5

# Funcion para matar el proceso
matar(){
INTENTO=1

while [ `ps -ef --cols=5000 |grep -v "grep"| grep -c ${MAIN_CLASS}` -gt 0 ] && [ ${INTENTO} -le ${CNT_INTENTOS} ]; do
  ps -ef --cols=5000 |grep -v "grep"| grep ${MAIN_CLASS}|awk '{ print $2 }'|xargs -i{} kill -9 {} > /dev/null 2> /dev/null
  INTENTO=$(( ${INTENTO} + 1 ))
done
}

matar

Queda abierta la sección de comentarios para proponer mejores formas de matar procesos java.

Posts relacionados (generados automáticamente):

  1. Matar procesos en Windows (taskkill)
  2. Audio y video en Java utilizando ffmpeg, Jffmpeg, y JMF
  3. Crear un nuevo proyecto Java con Maven
  4. Array de bytes y la clase java.nio.ByteBuffer
  5. “Unmappable character for encoding UTF-8″ al compilar proyectos Java con Maven

Categories: Java, Linux Tags: ,
  1. Sin comentarios aún.
  1. Sin trackbacks aún.