2010-10-21 26 views
11

假設我有一個當前正在運行的進程,我怎樣才能把它變成Java中的Process對象? 該進程已經在運行,所以我不想從另一個產生,我只是想將它封裝到一個Process對象中,我可以在Java代碼中使用它。 東西沿着線:Java:獲得一個給定進程的進程

int pid = getPid(); 
Process proc = magicGetProcess(pid); 

感謝

+0

我不認爲Java內置了足夠的進程管理功能。希望有人會證明我錯了。 – 2010-10-21 21:03:30

+0

你最想要哪個'Process'的功能?你正在嘗試做一個'waitFor()',還是你希望能夠將輸入/輸出流重定向到你的應用,或者是什麼?我很確定你要求的內容本身是不可能的,但我們也許能夠幫助你實際的要求。 – 2010-10-21 21:03:37

+0

嗯,我需要在這個過程中傳入一個方法,幾乎​​檢查它是否意外終止,並抓住退出代碼,如果它。 – Th3sandm4n 2010-10-21 21:07:24

回答

4

我不認爲這是可能僅使用內置的庫。 AFAIK,獲得運行過程自己的PID已經不是微不足道的(參見feature requestalternate mechanisms)。

快速查看java.lang.Process class表明您可以使用JNI和本機代碼編寫您的自定義實現java.lang.Process。然後,您的自定義類可以實現額外的方法,例如您的問題中的方法。

+0

嗯亞,這是它看起來像。好吧。 – Th3sandm4n 2010-10-21 21:21:23

+0

僅供參考:java.lang.Process的URL損壞 – Ismoh 2017-12-08 09:45:37

0

在* nix世界中,抓取非子進程的退出代碼並不容易,因爲退出代碼只要父進程拿起子進程的代碼就立即與進程一起消失。您可以使用一些跟蹤工具附加到正在運行的進程,並在進程死亡時提取其退出代碼。大多數* nix操作系統都有命令行工具,可以讓您以非侵入的方式執行操作(例如在Linux上進行操作,在SunOS上進行操作)。但是,只能針對您自己的進程或者以root用戶身份運行它們。另一種方法是配置操作系統的審計子系統以記錄所有進程的退出代碼。

+0

在Unix上,您可以使用'waitpid()'函數獲取非子進程的退出代碼。問題是從Java調用它。 – 2010-10-21 23:02:24

0

你不能。 Process中的每個操作都要求該過程是一個子過程。不是一個任意的過程。

0

如何使用RMI?它有可能將一個Process對象傳遞給Process?可能不會,因爲進程不是可序列化的

相關問題