【发布时间】:2012-08-05 17:19:16
【问题描述】:
在 MRI Ruby 中我可以这样做:
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
但是上面的代码不会在 jRuby 中运行,因为它不支持 'fork' 方法:
NotImplementedError: fork is not available on this platform
在 jRuby 中是否有任何替代解决方案?
谢谢。
【问题讨论】:
-
this question 的答案可能对您有用。
-
谢谢,Spoon 看起来很有趣,但它并没有解决我的问题,因为它只是生成了一个外部进程而不共享当前线程的状态。实际上,我需要“子进程”是另一个 Ruby 解释器,子进程将共享当前线程的状态。
-
@Kelvin 的回答非常好。我认为可能值得问一下为什么要 fork()。 Fork() 是一个内置于基于 unix 的系统的系统调用。另一方面,Java 旨在在任何地方运行。如果您需要分叉,那么我建议 JRuby 对您来说是错误的 ruby 实现。