2010-11-23 77 views
4

我打算生一個孩子做一些工作。我想使用與父進程相同的命令行產生子進程。如何確定用於啓動當前jvm的命令?

例如,如果父開始像這樣:

#>/usr/bin/java ParentProgram

然後我稱之爲

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

實施例2:

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

然後我稱之爲

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

我知道我可以從系統屬性中找到類路徑。而不是使用Runtime.exec,我計劃使用ProcessBuilder,它將父級環境複製到子級環境中。但基本上我想使用與父類相同的java程序和參數。我沒有在系統屬性中找到這些信息。

+2

似乎在這裏得到解答:http://stackoverflow.com/questions/1518213/read-java -jvm-startup-parameters-eg-xmx – aioobe 2010-11-23 21:31:32

+0

該信息絕對有用。雖然它不告訴我用來啓動jvm的命令(即/ usr/bin/java),但它爲我做了其他事情。當我使用/ usr/bin/java啓動程序時,它顯示了所有傳遞的參數。但是,當我開始使用/ usr/bin/jdb時,RuntimeMXBean顯示了-Xdebug和-Xrunjdwp的附加參數:transport = dt_socket,address = hostname.local:58481,suspend = y
所以我認爲jdb實際上啓動了normal jvm與額外的參數(這也是有道理的)。但是,瞭解整個命令仍然很好。 – TejasInstrument 2010-11-23 22:36:16

回答

1

您可以使用JMX:

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

嗨AlexR,謝謝你的回答。但是我仍然無法確定用於啓動jvm的命令(即/ usr/bin/java) – TejasInstrument 2010-11-24 22:54:23

-1

隨着JDK 6,有一個名爲金佛山命令,它可以幫助你確定哪些參數提供

你只需要你的進程ID,要知道,您可以使用jps命令,它會顯示所有正在運行的jvm進程和ids。

所以用下面的命令,你可以得到所有的命令行通過。使用相同的命令,你可以改變一些財產dynamacally(只看到金佛山-H)

金佛山