我正在尝试使用 POSIX fork 克隆正在运行的 JVM。我访问 fork 的方式是通过 JNI(即https://github.com/kohsuke/akuma/blob/master/src/main/java/com/sun/akuma/CLibrary.java)。在分叉之后,我希望父母和孩子都进行一些计算然后退出。
以下是测试代码。在fork之后,可以看到两行“After the fork.”,意思是parent和child都到了这个点。但是随后,父进程正常退出,而子进程没有。
此外,我无法在终端中使用信号 15 终止子进程。我必须使用 kill -9 来杀死子 JVM 进程。
知道可能出了什么问题吗?
import static com.sun.akuma.CLibrary.LIBC;
public class ForkTest {
public static void main(String[] args) {
int pid = LIBC.fork();
if (pid == 0) {
System.out.println("This is the child.");
} else {
System.out.println("This is the parent. child pid=" + pid);
}
System.out.println("After the fork.");
}
}