【发布时间】:2011-02-10 07:52:45
【问题描述】:
我使用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。 (不确定它们是否重要~)
这个领域的新手。欢迎提出任何建议。
百合
【问题讨论】:
标签: java c++ jvm persistence subprocess