37 votes

Est-il possible d'obtenir la commande utilisée pour lancer la jvm en java ?

Je voudrais savoir s'il est possible d'obtenir à partir du code la commande utilisée pour lancer un programme java.

Par exemple, si je lance un programme java avec :

 java -cp lib1:lib2:... -jar mylib.jar com.foo.Bar

Je voudrais obtenir la chaîne exacte (paramètres jvm inclus).

Est-ce possible ?


Commentaire sur la prime et la question

Merci à tous pour vos réponses. Malheureusement, je n'ai pas obtenu la réponse que je cherchais. J'espérais qu'il existait une solution portable pour obtenir la commande java complète à partir du programme lui-même. Comme il semble qu'il n'y ait pas de solution portable et que j'utilise Linux, j'utilise les réponses de agodinhost y Luigi R. Viggiano pour résoudre mon problème. Cependant je donne la prime à rahulroc pour la réponse la plus complète. Pour le reste, un upvote pour tous :)

24voto

rahulroc Points 4165

Le code mentionné ci-dessous devrait montrer tous les paramètres de la JVM, les arguments passés à la méthode principale ainsi que le nom de la classe principale.

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;

import java.util.List;

public static void main(String[] args) {
  RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
  List<String> aList = bean.getInputArguments();

  for (int i = 0; i < aList.size(); i++) {
    System.out.println( aList.get( i ) );
  }
  // print the non-JVM command line arguments using args
  // name of the main class
  System.out.println(" " + System.getProperty("sun.java.command"));
}

javadoc pour getInputArguments

Renvoie les arguments d'entrée transmis à la machine virtuelle Java qui n'inclut pas les arguments de la méthode main. Cette méthode renvoie une liste vide si aucun argument d'entrée n'a été transmis à la machine virtuelle virtuelle Java.

Certaines implémentations de la machine virtuelle Java peuvent prendre des arguments d'entrée provenant de plusieurs sources différentes : par exemple, les arguments transmis par l'application qui lance la machine virtuelle Java, comme la commande java', des variables d'environnement, des fichiers de configuration, etc.

En général, les options de la ligne de commande de la commande 'java' ne sont pas toutes transmises à la machine virtuelle Java. transmises à la machine virtuelle Java. Ainsi, les arguments d'entrée renvoyés peuvent ne pas inclure toutes les options de la ligne de commande.

Vous pouvez également jeter un coup d'œil à : jps

Il s'agit d'un programme Java capable d'obtenir la ligne de commande complète de tous les processus Java, y compris le nom complet de la classe principale et de la JVM. processus Java, y compris le nom complet de la classe principale et les options de la JVM. et les options.

Vous pouvez trouver un bon résumé des différentes Outils JVM dont Lanceur d'applications Java liens vers :

18voto

assylias Points 102015

Vous pouvez l'utiliser pour récupérer les paramètres de la VM :

public static void main(String args[]) {
    List<String> inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
    System.out.println("input arguments = " + inputArguments);
}

Cependant, il ne vous donnera pas toute la ligne de commande. Exemple de sortie :

arguments d'entrée = [-Dfile.encoding=UTF-8, -XX:-UseTLAB, -Xms2000m, -Xmx2000m, -XX:+PrintCompilation, -XX:+PrintGC].

7voto

agodinhost Points 154

Dans une machine linux serait plus facile à exécuter :

ps -ef | grep java

cette commande va lister tous les programmes java en cours d'exécution avec les paramètres utilisés.

Je ne suis pas sûr de ce qui peut être utilisé dans un environnement Windows.

7voto

Luigi R. Viggiano Points 3104

Il ne fonctionne que sur Soleil  Oracle JVM : System.getProperty("sun.java.command")

En outre, vous pouvez jeter un coup d'œil à JavaSysMon il peut signaler la ligne de commande des processus actifs. Pour vérifier quel est le processus JVM en cours, cliquez ici : Comment un programme Java peut-il obtenir son propre identifiant de processus ?

5voto

djangofan Points 6046

Dans le gestionnaire de tâches de Win2003, vous pouvez activer l'affichage d'une colonne qui affiche la commande comme sous linux. Ou bien, vous pouvez le faire à partir de la ligne de commande comme ceci :

wmic.exe PROCESS where "name like '%java%'" get Processid,Caption,Commandline

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X