2010-11-23 5 views
4

Je prévois de frayer un enfant pour faire un peu de travail. Je veux générer l'enfant en utilisant la même ligne de commande que le processus parent.Comment puis-je déterminer la commande utilisée pour démarrer le jvm actuel?

Par exemple, si le parent a commencé comme ceci:

#>/usr/bin/java ParentProgram

je qualifierais

Runtime.exec("/usr/bin/java ChildProgram");

Exemple 2:

#>/usr/bin/jdb -cp ./:/home/name/tool/library.jar -Xmx4G ParentProgram

alors je qualifierais

Runtime.exec("/usr/bin/jdb -cp ./:/home/name/tool/library.jar -Xmx4G ChildProgram");

Je sais que je peux trouver le chemin de classe à partir des propriétés du système. Et au lieu d'utiliser Runtime.exec, j'ai l'intention d'utiliser ProcessBuilder, qui copie l'environnement du parent dans l'environnement de l'enfant. Mais fondamentalement, je veux utiliser le même programme java et les arguments que le parent obtient. Je n'ai pas trouvé cette information dans les propriétés du système.

+2

Semble répondre ici: http://stackoverflow.com/questions/1518213/read-java -jvm-startup-parameters-eg-xmx – aioobe

+0

Cette information est certainement utile. Bien qu'il ne me dise pas la commande utilisée pour démarrer le jvm (ie/usr/bin/java), il fait quelque chose d'autre pour moi. Quand je lance le programme en utilisant/usr/bin/java, il montre tous les args qui sont passés. Cependant, quand je commence à utiliser/usr/bin/jdb, le RuntimeMXBean montre les arguments supplémentaires de -Xdebug et -Xrunjdwp: transport = dt_socket, adresse = hostname.local: 58481, suspend = y
Donc je pense que jdb commence réellement la normale jvm avec les args supplémentaires (ce qui est logique aussi). Mais ce serait quand même bien de connaître toute la commande. – TejasInstrument

Répondre

1

Vous pouvez utiliser JMX:

List<String> args = ManagementFactory.getRuntimeMXBean().getInputArguments(); 
+0

Bonjour Alex, merci pour votre réponse. Mais je n'arrive toujours pas à déterminer la commande utilisée pour lancer jvm (ie/usr/bin/java) – TejasInstrument

-1

Avec JDK 6, il y a commande nommé jinfo qui vous permet d'identifier quels sont les arguments fournis

Vous avez juste besoin de votre processus Id, et de savoir que, vous pouvez utiliser la commande jps, elle vous montrera tous les processus et identifiants jvm en cours d'exécution. Par conséquent, avec la commande ci-dessous, vous pouvez passer toutes les lignes de commande. Avec la même commande que vous pouvez modifier certains dynamacally de propriété (voir à jinfo -h)

jinfo

+0

Cet utilitaire n'est pas supporté et peut être disponible ou non dans les futures versions du SDK J2SE: http://docs.oracle.com /javase/1.5.0/docs/tooldocs/share/jinfo.html#options – Vikram

Questions connexes