2008-11-13 12 views
50

Czy można zrobić widelec typu "C like" w Javie, używając nowego niezależnego procesu jvm?Java - C-Like Fork?

Jak?

+1

Może mógłbyś bardziej szczegółowo opisać, co próbujesz osiągnąć? Jak wspomniano, możesz exec() inny proces, który może być inną instancją JVM, ale to nie daje takiego samego podziału stanów jak fork() w C. Z drugiej strony możesz uruchamiać wątki, ale tam masz więcej wspólnego niż w przypadku fork(). –

+0

Po prostu chcę uniknąć udostępniania, które wątek implikuje. Thks za twoją obawę :) – sakana

Odpowiedz

10

Po prostu pracuję nad tym: proces Java z innymi procesami Java. Użyłem artykułu From Runtime.exec() to ProcessBuilder jako solidnej podstawy, a When Runtime.exec() won't jako dobrej porady, jak pożreć strumienie wyjściowe.

PS: Dla tych, którzy się zastanawiają, musiałem to zrobić (zamiast tworzyć nowe wątki), ponieważ kolejny proces Java sprawdza obecność tych procesów, które normalnie są uruchamiane oddzielnie za pomocą poleceń powłoki.

+2

Te właśnie odwołują się do 'Runtime.exec()', który jest WAY inny od być w stanie jawnie kontrolować dziecko po 'fork()'. – ShiDoiSi

+0

Czy możesz zaktualizować odpowiedź i poprawić link do ProcessBuilder? –

12

Ta odpowiedź jest chyba późno trochę ale:

http://akuma.kohsuke.org/

wydaje się być dokładnie to, czego szukasz

+0

wydaje się, że nie jest to naprawdę widżet, ale nowe procesy potomne exec'a w sposób, który daje pewne korzyści, takie jak fork. – rogerdpack

+3

Zauważ, że działa tylko w systemie podobnym do systemu POSIX (tak z grubsza wszystko oprócz Windows). – CharlesB

+0

Możesz przeczytać kod źródłowy Akuma i użyć API posix używającego JNA jak akuma. – Arnaud

3

Application Isolation API (JSR 121) wprowadza Isolate który rozwiązuje ten przypadek użycia.

+1

O ile widzę, izolacyjny interfejs API nie jest obsługiwany w ramach obecnego (1.8) JDK. Istnieje eksperymentalny MVM (Multitasking Virtual Machine), który działa, ale nie znalazł się w głównej linii. Ponadto wydaje mi się, że izolacyjny API nie pozwala na zrobienie rozwidlenia, w którym klonowany jest stan procesu rozwidlania: O ile mi wiadomo, izolat zaczyna się od głównej metody i (oczywiście) różne izolaty nie dzielą się stanem. –

Powiązane problemy