W MRI Ruby mogę to zrobić:Alternatywa dla odrodzenia procesu z "widelcem" w jRuby?
def transfer
internal_server = self.init_server
pid = fork do
internal_server.run
end
# Make the server process run independently.
Process.detach(pid)
internal_client = self.init_client
# Do other stuff with connecting to internal_server...
internal_client.post('some data')
ensure
# Kill server
Process.kill('KILL', pid) if pid
end
Jednakże powyższy kod nie będzie działał w JRuby, ponieważ nie obsługuje „widelec” metodę:
NotImplementedError: fork is not available on this platform
Czy istnieją jakieś alternatywne rozwiązanie dla to w jRuby?
Dzięki.
Odpowiedzi na [to pytanie] (http://stackoverflow.com/questions/5349629/ruby-daemons-and-jruby-alternative-options) mogą być dla Ciebie przydatne. –
Dziękuję, [Łyżka] (https://github.com/headius/spoon) wydaje się interesująca, ale to nie rozwiązuje mojego problemu, ponieważ po prostu odradza się proces zewnętrzny bez dzielenia się stanem bieżącego wątku. W rzeczywistości potrzebuję "procesu potomnego" to inny interpreter Rubiego, a proces potomny będzie współdzielony z bieżącym wątkiem. –
@ Odpowiedź Kelvina jest naprawdę dobra. Myślę, że warto zapytać, dlaczego chcesz się rozwidlić(). Funkcja fork() jest wywołaniem systemowym wbudowanym w systemy oparte na systemach uniksowych. Z drugiej strony Java ma być uruchamiana w dowolnym miejscu. Jeśli potrzebujesz rozwidlenia, sugerowałbym, że JRuby jest niewłaściwą implementacją ruby dla ciebie. – Stewart