Bonjour à tous,
depuis quelques temps je recherche un moyen fiable d'éviter de lancer plusieurs mon programme Java. Je voudrais éviter les solutions de type ServerSocket et verrouillage de fichier, qui ne sont pas des solutions fiables de mon point de vue (au niveau plantage, disponiblité de ports, performance ...)
Du coup, je suis me plonger dans les méandres de Java et j'ai trouvé que dans le JDK, il existe une commande "jps" qui permet de lister les processus dans la JVM. Malheureusement, elle n'est qu'expérimental, et du coup n'est pas présente dans la JRE.
J'ai remarqué une autre chose, c'est que JConsole utilise JConsole.jar et Tools.jar dans le répertoire lib de la JDK. Là, on peut essaiement avoir la liste des processus, et j'avais même fait une portion de code qui est la suivante :
Malheureusement pour moi, encore une fois, ces packages ne sont pas présents dans la JVM, et sont plutôt gros pour être rajouter dans un projet dans le cadre de cette unique fonctionnalité (près de 12 MO). De plus, il me semble que c'est là aussi en expérimental.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public static Boolean isPresent(Class cl) { Integer count = 0; try { for(Iterator<LocalVirtualMachine> lvm = localVirtualMachine.getAllVirtualMachines().values().iterator();lvm.hasNext(); ){ if(lvm.next().displayName().equalsIgnoreCase(cl.getName())){ count++; } } } catch (Exception e) { count = 0; } return (count > 1); }
Du coup ma question est : existe-t-il en Java un moyen de connaître les processus tournant sur la JVM ? Si oui comment ? Peut-on se passer de JNI ?
Je vous remercie d'avance de vos réponses
Partager