4
我用Java Runtime.getRuntime().exec(command)
創建子進程,並打印其pid
如下:爲什麼由Java創建的兩個子進程的行爲有所不同?
public static void main(String[] args) {
Process p2;
try {
p2 = Runtime.getRuntime().exec(cmd);
Field f2 = p2.getClass().getDeclaredField("pid");
f2.setAccessible(true);
System.out.println(f2.get(p2));
} catch (Exception ie)
{
System.out.println("Yikes, you are not supposed to be here");
}
}
我試圖用C++可執行文件和Java可執行文件(.jar文件)。兩個可執行文件都會持續輸出「Hello World」到stdout。
當cmd
是C++可執行文件時,pid
被打印輸出到控制檯,但是隻要main()
返回就會終止子進程。但是,當我在cmd
中調用.jar可執行文件時,子進程不會被終止,這是所需的行爲。
我不明白爲什麼具有不同可執行文件的相同Java代碼可能表現如此不同。我應該如何修改我的代碼,以便在Java中擁有持久的子進程? PS:我使用Ubuntu 9.10和OpenJDK-1.6。 (不知道他們是否重要〜)
在這個領域的新手。歡迎任何建議。
Lily
我想這不完全是OP期待的答案。你如何輕鬆「將C++代碼轉化爲GUI應用程序」? – recipriversexclusion 2010-04-20 21:15:48
簡單的答案?你沒有。控制檯和Windows子系統是分開的,使用方式不同。 Windows應用程序無法獲得控制檯,因此除非您連接到該過程,否則將永遠無法看到輸出。 – cHao 2010-04-20 21:27:45
不是那麼容易的答案:http://msdn.microsoft.com/en-us/library/ms682055(v=VS.85).aspx – cHao 2010-04-20 21:38:38