2010-11-23 6 views
4

Ich plane, ein Kind zu spawnen, um etwas Arbeit zu erledigen. Ich möchte das Kind mit der gleichen Befehlszeile wie den übergeordneten Prozess erstellen.Wie kann ich den Befehl zum Starten des aktuellen jvm ermitteln?

Zum Beispiel, wenn die Eltern wie so gestartet wurde:

#>/usr/bin/java ParentProgram

dann würde ich rufen

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

Beispiel 2:

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

dann würde ich rufen

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

Ich weiß, dass ich den Klassenpfad aus den Systemeigenschaften finden kann. Und anstatt Runtime.exec zu verwenden, plane ich, ProcessBuilder zu verwenden, der die Umgebung des Elternteils in die Umgebung des Kindes kopiert. Aber im Grunde möchte ich das gleiche Java-Programm und die gleichen Argumente wie die Eltern verwenden. Ich habe diese Information in den Systemeigenschaften nicht gefunden.

+2

scheint hier beantwortet werden: http://stackoverflow.com/questions/1518213/read-java -jvm-Startup-Parameter-zB-xmx – aioobe

+0

Diese Info ist definitiv nützlich. Obwohl es mir den Befehl zum Starten des jvm (dh/usr/bin/java) nicht sagt, macht es etwas anderes für mich. Wenn ich das Programm mit/usr/bin/java starte, werden alle übergebenen Argumente angezeigt. Wenn ich jedoch/usr/bin/jdb benutze, zeigt RuntimeMXBean die zusätzlichen Argumente -Xdebug und -Xrunjdwp an: transport = dt_socket, Adresse = hostname.local: 58481, suspend = y
Also ich denke, jdb startet eigentlich das normale jvm mit den zusätzlichen Argumenten (was auch Sinn macht). Aber es wäre trotzdem nett, den gesamten Befehl zu kennen. – TejasInstrument

Antwort

1

können Sie JMX verwenden:

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

Hallo AlexR, danke für deine Antwort. Aber ich kann immer noch nicht den Befehl zum Starten der jvm (dh/usr/bin/java) bestimmen – TejasInstrument

-1

mit JDK 6, gibt es Befehl jinfo benannt, die Sie, welche Argumente

Sie nur an Ihren Prozess benötigen zur Verfügung gestellt zu identifizieren hilft Id, und zu wissen, dass, Sie können jps Befehl verwenden, es zeigt Ihnen alle laufende jvm Prozesse und IDs.

Also mit unten Befehl können Sie alle Befehlszeile übergeben erhalten. Mit dem gleichen Befehl können Sie eine Eigenschaft dynamacally ändern (nur sehen jinfo h)

jinfo

+0

Dieses Dienstprogramm wird nicht unterstützt und ist möglicherweise in zukünftigen Versionen des J2SE SDK nicht verfügbar: http://docs.oracle.com /javase/1.5.0/docs/toolocs/share/jinfo.html#options – Vikram