2010-01-05 103 views
25

我想在我的應用程序中創建一個進程。但是,在環顧四周並從Java的API中,我仍然不太明白。如何用Java創建一個進程

基本上我想創建一個多進程應用程序。但新的過程是我的應用程序中的一個類。

我知道你們中的一些人可能會問爲什麼不創建一個線程?因爲這個類正在調用一個matlab代碼,所以問題和Java類是Here

是否有任何代碼示例或教程,您可以推薦?謝謝。

+2

請注意,您鏈接的答案不*表示您需要單獨的過程。你可以使用一個線程,你只需要確保你只使用一個線程中的MATLAB。 – sleske 2010-01-05 13:08:48

+0

那麼,它不適合我。您是否閱讀過我在該主題上發佈的鏈接?從我從文章中解讀的內容來看,我真的需要一個過程。除非你能指出我正確的方向。 – 2010-01-05 14:06:34

回答

15

只有一種方法可以在Java中創建進程,Runtime.exec() - 基本上它允許您像啓動命令行界面一樣啓動新的JVM。

+0

所以這意味着我需要將代碼作爲單獨的應用程序編譯並調用它? – 2010-01-05 12:50:55

+6

它允許您啓動任何系統進程,而不僅僅是一個新的JVM,除非這是您想要啓動的新進程。 – Dave 2010-01-05 12:51:45

+0

@Dave:當然可以。 – 2010-01-05 12:55:38

23

也許java.lang.Process可以幫助在這裏..

ProcessBuilder.start()Runtime.exec方法創建一個本機進程,並返回過程的一個子類,可用於控制進程並獲取關於它的信息的一個實例。 Process類提供了執行進程輸入,執行輸出到進程,等待進程完成,檢查進程退出狀態以及銷燬(終止)進程的方法。

+0

他的問題不是關於java.lang.Process,而是如何編寫一個可以克隆自己的應用程序。 – 2010-01-05 12:54:58

+6

@Aaron:是什麼讓你相信海報希望應用「克隆自己」?而這甚至意味着什麼?在Unix中像fork()嗎? – sleske 2010-01-05 13:06:11

+0

@sleske:Aaron幾乎是正確的,我想在我的代碼中運行一個類作爲一個進程,而其餘的類作爲另一個進程運行。在某種意義上它的fork()。 – 2010-01-05 13:58:20

4

我猜你知道如何創建一個新的過程。如果不是,請參閱herehere

現在您需要使用當前的類路徑運行java.exe。你可以在系統屬性java.class.path中找到這個類路徑。要找到java.exe,請查看new File(System.getProperty("java.home"), "bin")

如果你對這種方法有問題,我建議編寫一個包裝腳本並用足夠的參數調用它,以便main()中的代碼可以決定調用哪個實際類。

+0

系統屬性java.class.path不包含java.exe,您可能是指java.home/bin。 – 2013-05-14 09:09:39

+0

@AndreasÅgren:文字是正確的,但令人困惑。改進它。 – 2013-05-14 14:55:32

+0

好吧,看起來不錯。 – 2013-05-14 20:35:32

6

如果你想要更多的細粒度控制,你可以使用ProcessBuilder - 這個類允許你設置環境變量和配置項目的管道(stdoutinerr)。

配置完它,你可以調用ProcessBuilder#start()多次,你爲了創建新的進程(它返回的Process一個實例)想要的。您可以將這些調用之間的新進程的配置更改爲start()

相關問題