我想在我的應用程序中創建一個進程。但是,在環顧四周並從Java的API中,我仍然不太明白。如何用Java創建一個進程
基本上我想創建一個多進程應用程序。但新的過程是我的應用程序中的一個類。
我知道你們中的一些人可能會問爲什麼不創建一個線程?因爲這個類正在調用一個matlab代碼,所以問題和Java類是Here
是否有任何代碼示例或教程,您可以推薦?謝謝。
我想在我的應用程序中創建一個進程。但是,在環顧四周並從Java的API中,我仍然不太明白。如何用Java創建一個進程
基本上我想創建一個多進程應用程序。但新的過程是我的應用程序中的一個類。
我知道你們中的一些人可能會問爲什麼不創建一個線程?因爲這個類正在調用一個matlab代碼,所以問題和Java類是Here
是否有任何代碼示例或教程,您可以推薦?謝謝。
只有一種方法可以在Java中創建進程,Runtime.exec()
- 基本上它允許您像啓動命令行界面一樣啓動新的JVM。
所以這意味着我需要將代碼作爲單獨的應用程序編譯並調用它? – 2010-01-05 12:50:55
它允許您啓動任何系統進程,而不僅僅是一個新的JVM,除非這是您想要啓動的新進程。 – Dave 2010-01-05 12:51:45
@Dave:當然可以。 – 2010-01-05 12:55:38
也許java.lang.Process可以幫助在這裏..
的
ProcessBuilder.start()
和Runtime.exec
方法創建一個本機進程,並返回過程的一個子類,可用於控制進程並獲取關於它的信息的一個實例。 Process類提供了執行進程輸入,執行輸出到進程,等待進程完成,檢查進程退出狀態以及銷燬(終止)進程的方法。
他的問題不是關於java.lang.Process,而是如何編寫一個可以克隆自己的應用程序。 – 2010-01-05 12:54:58
@Aaron:是什麼讓你相信海報希望應用「克隆自己」?而這甚至意味着什麼?在Unix中像fork()嗎? – sleske 2010-01-05 13:06:11
@sleske:Aaron幾乎是正確的,我想在我的代碼中運行一個類作爲一個進程,而其餘的類作爲另一個進程運行。在某種意義上它的fork()。 – 2010-01-05 13:58:20
我猜你知道如何創建一個新的過程。如果不是,請參閱here或here。
現在您需要使用當前的類路徑運行java.exe
。你可以在系統屬性java.class.path
中找到這個類路徑。要找到java.exe
,請查看new File(System.getProperty("java.home"), "bin")
。
如果你對這種方法有問題,我建議編寫一個包裝腳本並用足夠的參數調用它,以便main()
中的代碼可以決定調用哪個實際類。
系統屬性java.class.path不包含java.exe,您可能是指java.home/bin。 – 2013-05-14 09:09:39
@AndreasÅgren:文字是正確的,但令人困惑。改進它。 – 2013-05-14 14:55:32
好吧,看起來不錯。 – 2013-05-14 20:35:32
如果你想要更多的細粒度控制,你可以使用ProcessBuilder
- 這個類允許你設置環境變量和配置項目的管道(stdout
,in
,err
)。
配置完它,你可以調用ProcessBuilder#start()
多次,你爲了創建新的進程(它返回的Process
一個實例)想要的。您可以將這些調用之間的新進程的配置更改爲start()
。
我的建議是看看ZT-EXEC:https://github.com/zeroturnaround/zt-exec
它包裹java.lang.ProcessBuilder中和和Apache下議院Exec和可輕鬆管理流程的生命週期。
請注意,您鏈接的答案不*表示您需要單獨的過程。你可以使用一個線程,你只需要確保你只使用一個線程中的MATLAB。 – sleske 2010-01-05 13:08:48
那麼,它不適合我。您是否閱讀過我在該主題上發佈的鏈接?從我從文章中解讀的內容來看,我真的需要一個過程。除非你能指出我正確的方向。 – 2010-01-05 14:06:34