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