from - run java application with arguments eclipse
cómo cambiar el nombre de un proceso de aplicación Java? (8)
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?
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.
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.
Echa un vistazo a launch4j , es un contenedor ejecutable que te permite asignar nombres ejecutables.
Esto es específico de Windows.
Estaba enfrentando el mismo problema en el que tengo que matar el programa específico de Java usando Taskkill . Cuando ejecuto el programa java, la lista de tareas muestra el mismo programa 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 programa java usando:
Inicie el programa java java de "MyProgramName".
Aquí el comando de inicio abrirá una nueva ventana y ejecutará el programa java con el título de la ventana establecido en MyProgramName .
Ahora para matar a este programa java usa el siguiente comando taskkill:
taskkill / fi "MyProgramName"
Su programa Java será eliminado solo. El descanso no se verá afectado.
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.
No todos los sabores del ejecutivo apoyan la bandera -a. Si el tuyo no, el programa 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.
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.