POSIX フォークを使用して、実行中の JVM のクローンを作成しようとしています。フォークにアクセスする方法は、JNI (つまりhttps://github.com/kohsuke/akuma/blob/master/src/main/java/com/sun/akuma/CLibrary.java ) を使用することです。フォークの後、親と子の両方で計算を行ってから終了したいと思います。
以下はテストコードです。分岐後、「After the fork.」という行が 2 行表示されますが、これは親と子の両方がこの時点に到達したことを意味します。ただし、親プロセスは正常に終了しますが、子プロセスは終了しません。
さらに、端末のシグナル15で子プロセスを強制終了できません。子 JVM プロセスを強制終了するには、kill -9 を使用する必要があります。
何が間違っている可能性がありますか?
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.");
}
}