Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Java创建的两个子流程表现不同?_Java_C++_Jvm_Persistence_Subprocess - Fatal编程技术网

为什么Java创建的两个子流程表现不同?

为什么Java创建的两个子流程表现不同?,java,c++,jvm,persistence,subprocess,Java,C++,Jvm,Persistence,Subprocess,我使用JavaRuntime.getRuntime().exec(command)创建一个子流程,并按如下方式打印其pid: public static void main(String[] args) { Process p2; try { p2 = Runtime.getRuntime().exec(cmd); Field f2 = p2.getClass().getDeclaredField("pid"); f2.setAccessible(true

我使用Java
Runtime.getRuntime().exec(command)
创建一个子流程,并按如下方式打印其
pid

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”

<> > >CMD是C++可执行文件,PID打印到控制台,但子进程在主()/<代码>返回时被杀死。但是,当我在
cmd
中调用.jar可执行文件时,子进程不会被终止,这是所需的行为

我不明白为什么相同的Java代码和不同的可执行文件的行为会如此不同。我应该如何修改代码,以便在Java中拥有持久的子进程

PS:我正在使用Ubuntu 9.10和OpenJDK-1.6。(不确定它们是否重要~)

这个领域的新手。欢迎任何建议


莉莉

C++的EXE几乎肯定是一个控制台应用程序。我认为jar在默认情况下会被视为GUI应用程序,并且会执行与主进程分离的标准操作


<>如果你把C++代码转换成GUI应用程序,我想你会看到它的行为类似于jar。如何轻松地“把C++代码转换成GUI应用程序”?简单的答案?你没有。控制台和Windows子系统是分开的,并且使用方式不同。Windows应用程序不会获得控制台,因此除非您连接到进程,否则您将永远看不到输出。不太简单的回答:谢谢您的回复。但问题是:我不在乎控制台输出。只要main()返回后子进程仍在运行,我就已经很高兴了~