web-dev-qa-db-fra.com

comment changer le nom d'un processus d'application Java?

Lors de l'exécution d'une application Java Java, le nom de processus qui lui est donné est généralement Java.exe ou javaw.exe. Mais comment puis-je le faire appeler par le nom de mon application?

40
Ravindra

Ces méthodes sont adaptées aux serveurs avec beaucoup de processus Java en cours d'exécution, et où vous avez besoin d'un moyen rapide de trouver le bon jvm (sans utiliser jps.) Pour les applications, je suppose launch4j ou un autre wrapper est la voie à suivre.

Sous Unix, si vous lancez à partir d'un script Shell (au moins pour bash et éventuellement pour d'autres shells décents), vous pouvez utiliser:

exec -a goodname Java ...

pour lancer Java et passer "goodname" comme 0ème argument, qui sera affiché comme nom de processus dans ps etc.

Une alternative peut-être meilleure (qui semble également fonctionner pour top) est de créer un lien symbolique: ln -s /usr/bin/Java /usr/local/bin/kallekula.

Les raccourcis dans Windows ne feront pas l'affaire, mais Windows Vista/7 prend en charge les liens symboliques en utilisant mklink. Cela peut fonctionner, mais je n'ai pas testé. Je ne sais pas si exec -a fonctionne également avec cygwin bash sous Windows.

39
KarlP

Découvrez launch4j , c'est un wrapper exécutable qui vous permet d'attribuer des noms exécutables.

17
z -

À moins que vous ne lanciez Java via JNI dans votre propre exécutable personnalisé, le nom du processus sera toujours Java.exe.

Il existe plusieurs Java lanceurs/wrappers qui peuvent générer cet exécutable pour vous.

10
basszero

Ceci est spécifique à Windows.
J'étais confronté au même problème où je dois tuer le programme spécifique Java en utilisant taskkill . Lorsque j'exécute le programme Java, liste des tâches était montrant le même programme avec le nom de l'image défini comme Java.exe. Mais en le tuant en utilisant taskkill/F Java.exe arrêtera toutes les autres applications Java autres que celles prévues, qui ne sont pas nécessaires.

Je lance donc le même programme Java en utilisant:

démarrer "MyProgramName" Java java-program ..

Ici, la commande start ouvrira une nouvelle fenêtre et exécutera le programme Java avec le titre de la fenêtre défini sur MyProgramName.

Maintenant, pour utiliser ce programme Java, utilisez la commande taskkill suivante:

taskkill/fi "MyProgramName"

Votre programme Java sera tué uniquement. Le reste ne sera pas affecté.

6
elite21

Si vous utilisez Sun JDK, vous pouvez également utiliser l'outil de ligne de commande "jps" pour obtenir une liste détaillée des processus Java exécutés sur la boîte).

5
Rob H

Vous pouvez le faire avec une cale LD_PRELOAD: https://github.com/airlift/procname

Le shim appelle simplement la prctl() spécifique à Linux lorsque le processus démarre:

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

L'appel doit se produire sur le thread principal, il n'est donc pas possible de le faire à partir de Java ou même avec un agent JVMTI, car ceux-ci se produisent sur un thread différent.

3
David Phillips

En supposant que ce que vous recherchez vraiment est un moyen de terminer le bon processus plus tard, une autre solution est la suivante:

Courir ps -ef | grep Java et vous devriez obtenir une liste qui ressemble à ceci:

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

Ensuite pkill -f peralex.MyApp va tuer le processus correct.

3
Noel Grandin

Toutes les versions d'Exec ne prennent pas en charge le drapeau -a. Si ce n'est pas le cas, le programme argv fait quelque chose de similaire.

2
mpm

WinRun4J

Dans de nombreux Java enveloppes exe, l'exe personnalisé n'est qu'un lanceur et le processus s'exécute toujours comme Java (w) .exe habituel. Dans WinRun4J d'autre part, le exe personnalisé est le processus qui exécute votre application, par exemple dans le Gestionnaire des tâches votre exe personnalisé est ce qui apparaît. Il prend en charge 32 bits et 64 bits, console et aucune console (ainsi que de nombreuses options de configuration).

0
user3479450