2008-11-13 22 views
50

¿Es posible hacer una horquilla "C like" en java, usando un nuevo proceso independiente de jvm?Java - Tenedor C-Like?

¿Cómo?

+1

¿Tal vez podría entrar en más detalles sobre lo que está tratando de lograr? Como se mencionó, puede ejecutar() otro proceso, que podría ser otra instancia de la JVM, pero eso no le da el mismo estado compartido que fork() en C. Por otro lado, puede ejecutar subprocesos, pero ahí obtienes más información de la que compartirías con fork(). –

+0

Simplemente quiero evitar compartir lo que implica el hilo. Gracias por su preocupación :) – sakana

Respuesta

10

Funnily, estoy trabajando en esto: un proceso de Java que ejecuta otros procesos de Java. Utilicé el artículo From Runtime.exec() to ProcessBuilder como una base sólida, y When Runtime.exec() won't como un buen consejo sobre cómo devorar los flujos de salida.

PD: Para los que se preguntan, tuve que hacer eso (en lugar de engendrar nuevos hilos) porque otro proceso de Java está verificando la presencia de estos procesos que, normalmente, se ejecutan por separado con comandos de shell.

+2

Esos solo hacen referencia a 'Runtime.exec()', que es MUY diferente de poder controlar explícitamente al niño después de 'fork()'. – ShiDoiSi

+0

¿Puedes actualizar la respuesta y corregir el enlace de ProcessBuilder? –

12

Esta respuesta es probablemente un poco tarde pero:

http://akuma.kohsuke.org/

parece ser exactamente lo que busca para

+0

parece que realmente no se bifurca, pero los nuevos procesos hijo del ejecutivo de una manera que da algunos beneficios como fork. – rogerdpack

+3

Tenga en cuenta que solo funciona en un sistema similar a POSIX (aproximadamente todo menos Windows) – CharlesB

+0

Puede leer el código fuente de Akuma y usar la API de posix usando JNA como lo hace akuma. – Arnaud

3

El Application Isolation API (JSR 121) introduce Isolate que se ocupa de este caso de uso.

+1

Por lo que puedo ver, la API de aislamiento no es compatible con el JDK actual (1.8). Existe un proyecto experimental MVM (Máquina Virtual Multitarea) que sí lo hace, pero no encontró su camino en la línea principal. Además, me parece que la API de aislamiento no permite hacer una bifurcación, donde el estado del proceso de bifurcación se clona en el niño: por lo que pude entender, el aislamiento comienza con un método principal, y (por supuesto)) diferentes aislados no comparten estado. –