Czy można zrobić widelec typu "C like" w Javie, używając nowego niezależnego procesu jvm?Java - C-Like Fork?
Jak?
Czy można zrobić widelec typu "C like" w Javie, używając nowego niezależnego procesu jvm?Java - C-Like Fork?
Jak?
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.
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
Czy możesz zaktualizować odpowiedź i poprawić link do ProcessBuilder? –
Ta odpowiedź jest chyba późno trochę ale:
wydaje się być dokładnie to, czego szukasz
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
Zauważ, że działa tylko w systemie podobnym do systemu POSIX (tak z grubsza wszystko oprócz Windows). – CharlesB
Możesz przeczytać kod źródłowy Akuma i użyć API posix używającego JNA jak akuma. – Arnaud
Application Isolation API (JSR 121) wprowadza Isolate
który rozwiązuje ten przypadek użycia.
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. –
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(). –
Po prostu chcę uniknąć udostępniania, które wątek implikuje. Thks za twoją obawę :) – sakana