我使用 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
会打印到控制台,但一旦 main()
返回,子进程就会被终止.但是,当我在 cmd
中调用 .jar 可执行文件时,子进程不会被终止,这是所需的行为。
我不明白为什么具有不同可执行文件的相同 Java 代码的行为会如此不同。我应该如何修改我的代码,以便我可以在 Java 中拥有持久的子进程?
PS:我使用的是 Ubuntu 9.10 和 OpenJDK-1.6。 (不确定它们是否重要~)
这个领域的新手。欢迎任何建议。
百合花
最佳答案
C++ EXE 几乎肯定被标记为控制台应用程序。我认为 jar 默认情况下会被视为 GUI 应用程序,并且会执行标准的从主进程分离的操作。
如果您将 C++ 代码转换为 GUI 应用程序,我想您会发现它的行为与 jar 类似。
关于java - 为什么 Java 创建的两个子进程表现不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2678423/