2009-05-19 100 views
35

Al ejecutar 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?cómo cambiar el nombre de un proceso de aplicación Java?

+0

relacionado: [¿Cómo cambiar argv0 en bash para que el comando aparezca con un nombre diferente en ps?] (Http://stackoverflow.com/questions/3251550/how-to-change-argv0-in-bash-so- command-shows-up-with-different-name-in-ps) – jfs

Respuesta

18

Consulte launch4j, es un contenedor ejecutable que le permite asignar nombres ejecutables.

+3

La característica se ha eliminado en 2013: Cambios en la versión 3.1.0-beta2 (20-08-2013) Se ha eliminado la función de nombre de proceso personalizado que no era compatible con las versiones más nuevas de Windows. –

+0

Es cierto que launch4j ya no le permite cambiar el nombre del proceso javaw.exe. Sin embargo, si crea el archivo launch4j exe con la opción stayalive = true, el nombre del proceso para su archivo exe personalizado permanecerá en la lista de procesos además del proceso javaw.exe. Entonces, esto le da a los usuarios la opción de matar el proceso java correcto matando el proceso con su nombre personalizado. – Enwired

+0

Sí, probado en Windows 10. Cuando es cierto, el nombre de la aplicación y su logotipo estarán en el administrador de tareas. Pero el problema es que si elimino la aplicación por su nombre personalizado, no mata la aplicación. – insyncim64

11

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

Existen varios lanzadores/envoltorios Java que pueden generar este ejecutable por usted.

+0

... incluso si tuviera que renombrar * java.exe *? – SamB

5

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

36

Estos métodos son adecuados para servidores con una gran cantidad de procesos Java en ejecución, y donde 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á iniciando desde un sript cáscara (al menos para bash y posiblemente para otros proyectiles decente) que puede utilizar:

exec -a goodname java ... 

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

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

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

+0

Esto es bueno para iniciar servidores, etc., ya que es una edición simple en el shell-script de inicio. – KarlP

+3

No parece ser una solución universal. – Raphael

+0

No, estaba totalmente en Unix, creo que cuando leí la pregunta. He editado la respuesta. – KarlP

3

Suponiendo que lo que realmente después es una manera de poner fin a la correcta el proceso correcto más adelante, a continuación, una solución alternativa es la siguiente:

Run ps -ef | grep java y se debe obtener una lista que se ve algo como 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.

+1

Tenga en cuenta que eso solo funciona si el sistema no trunca la línea de comando/recordado /. Tanto Linux como Solaris tienen límites en la longitud de la línea de comando que se recuerda (independiente del máximo que se acepta), y usted fácilmente lo supera con una ruta de clase larga. – ankon

2

No todos los sabores de exec admiten la marca -a. Si el tuyo no lo hace, el programa argv0 hace algo similar.

3

Esto es específico de Windows.
Estaba enfrentando el mismo problema donde tengo que matar el programa específico de Java usando taskkill.Cuando ejecuto el programa java, lista de tareas mostraba el mismo programa con nombre de imagen establecido 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.

Así que ejecutar el mismo programa Java usando:

inicio "MyProgramName" java-programa Java ..

Aquí empezar comando se abrirá una nueva ventana y ejecutar el programa Java con el título de la ventana establecido en MyProgramName.

Ahora para este Kil-java programa utilice el siguiente comando taskkill:

taskkill/fi "MyProgramName"

Su programa Java se mató solamente. El descanso no se verá afectado.

2

Usted puede hacer esto con un LD_PRELOAD cuña: https://github.com/airlift/procname

La cuña llamadas con sólo la específica de Linux prctl() cuando el proceso comienza:

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

La llamada tiene que ocurrir en el hilo principal, por lo no es posible hacer esto desde Java o incluso con un agente JVMTI, ya que estos ocurren en un hilo diferente.

+0

¡Buena solución! Pero solo Linux. –

Cuestiones relacionadas