In MRI Rubino posso fare questo:Alternativa per spawnare un processo con 'fork' in 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
Tuttavia il codice di cui sopra non verrà eseguito in JRuby, perché non supporta il metodo 'forchetta':
NotImplementedError: fork is not available on this platform
Esiste una soluzione alternativa per questo in jRuby?
Grazie.
Le risposte a [questa domanda] (http://stackoverflow.com/questions/5349629/ruby-daemons-and-jruby-alternative-options) potrebbero esserti utili. –
Grazie, [Spoon] (https://github.com/headius/spoon) sembra interessante, ma non risolve il mio problema, perché genera semplicemente un processo esterno senza condividere lo stato del thread corrente. In realtà, ho bisogno di "processo figlio" è un altro interprete Ruby e il processo figlio condividerà lo stato del thread corrente. –
@ La risposta di Kelvin è davvero buona. Penso che valga la pena chiedere perché vuoi fork(). Fork() è una chiamata di sistema che è incorporata nei sistemi basati su unix. D'altra parte, Java è progettato per essere eseguito ovunque. Se hai bisogno di fork, suggerirei che JRuby è l'implementazione ruby sbagliata per te. – Stewart