cómo cambiar el nombre de un proceso de aplicación Java?

Cuando se ejecuta una aplicación Java, el nombre del proceso que se le asigna suele ser java.exe o javaw.exe . Pero, ¿cómo puedo hacer que se llame por el nombre de mi aplicación?

Estos métodos son adecuados para servidores con muchos procesos en ejecución Java, y donde se necesita una forma rápida de encontrar el jvm correcto (sin usar jps). Para aplicaciones, supongo que launch4j u otro contenedor es el camino a seguir.

En Unix, si está ejecutando desde un shell sript (al menos para bash y posiblemente para otros shells decentes) puede usar:

 exec -a goodname java ... 

para lanzar java y pasar “goodname” como el 0º argumento, que se mostrará como el nombre del proceso en ps etc.

Una alternativa quizás mejor (que parece funcionar también para la top ) es crear un enlace simbólico: ln -s /usr/bin/java /usr/local/bin/kallekula .

Los accesos directos en Windows no funcionarán, pero Windows Vista / 7 admite enlaces simbólicos usando mklink . Eso puede funcionar, pero no lo he probado. No estoy seguro de si exec -a también funciona con cygwin bash en Windows.

Echa un vistazo a launch4j , es un contenedor ejecutable que te permite asignar nombres ejecutables.

A menos que ejecute Java a través de JNI en su propio ejecutable personalizado, el nombre del proceso siempre será java.exe.

Hay varios lanzadores / contenedores java que pueden generar este ejecutable por usted.

  • Launch4j , parece ser el más reciente y actualizado
  • JSmooth
  • install4J , comercial, más de lo que necesita

Si está utilizando Sun JDK, también puede usar la herramienta de línea de comandos “jps” para obtener una lista detallada de los procesos de Java que se ejecutan en el cuadro.

Asumiendo que lo que realmente busca es una forma de terminar el proceso correcto el correcto más adelante, entonces una solución alternativa es esta:

Ejecute ps -ef | grep java ps -ef | grep java y debería obtener una lista que se parece a esto:

  mruser 7518 7505 4 11:37 pts/3 00:00:00 /usr/bin/java -classpath MRD3030_Linked.jar peralex.MyApp 

Entonces pkill -f peralex.MyApp matará el proceso correcto.

Esto es específico de Windows.
Estaba enfrentando el mismo problema en el que tengo que matar el progtwig específico de Java usando Taskkill . Cuando ejecuto el progtwig java, la lista de tareas muestra el mismo progtwig con el nombre de la imagen configurado como java.exe . Pero matarlo usando taskkill / F java.exe detendrá todas las demás aplicaciones Java que no sean las deseadas y que no son necesarias.

Entonces ejecuto el mismo progtwig java usando:

Inicie el progtwig java java de “MyProgramName”.

Aquí el comando de inicio abrirá una nueva ventana y ejecutará el progtwig java con el título de la ventana establecido en MyProgramName .

Ahora para matar a este progtwig java usa el siguiente comando taskkill:

taskkill / fi “MyProgramName”

Su progtwig Java será eliminado solo. El descanso no se verá afectado.

No todos los sabores del ejecutivo apoyan la bandera -a. Si el tuyo no, el progtwig argv0 hace algo similar.

Puede hacer esto con un shim LD_PRELOAD : https://github.com/airlift/procname

El shim simplemente llama al prctl() específico de Linux prctl() cuando comienza el proceso:

 static void __attribute__ ((constructor)) procname_init() { prctl(PR_SET_NAME, "myname"); } 

La llamada tiene que ocurrir en el hilo principal, por lo que no es posible hacerlo desde Java o incluso con un agente JVMTI, ya que eso ocurre en un hilo diferente.

    Intereting Posts