如何确定ruby是否可以在不过度使用正则表达式的情况下进行分叉?

时间:2010-04-23 13:52:52

标签: ruby regex fork

是否有可能确定您正在运行的ruby的实现是否能够支持fork,而不运行针对RUBY_PLATFORM的正则表达式,它将会扩展到summons Cthulhu

(相关问题:Ruby - How can I find out on which system my program is running?

编辑:我尝试过Marc-Andre的建议。默认情况下,它对于禁用了fork的jruby不起作用:

192-168-1-7:~ agrimm$ jruby --1.9 -S jirb 
irb(main):001:0> RUBY_VERSION
=> "1.9.2dev"
irb(main):002:0> Process.respond_to?(:fork)
=> true
irb(main):003:0> Process.fork
NotImplementedError: fork is unsafe and disabled by default on JRuby

更新:从Marc-Andre的链接来看,从创建ruby实现的角度来看,这个问题看起来比我解决这个问题更加明智,而且失败了。

从正在编写ruby库的人的角度来看,什么是最全面的咒语,缺少运行fork并查看它是否会引发异常?

3 个答案:

答案 0 :(得分:3)

在Ruby 1.9中:

Process.respond_to?(:fork)  # => true if fork is supported, false otherwise

对于Ruby 1.8或JRuby(目前尚未实现),您必须对其进行实际测试。

另请参阅ruby-core上的long discussion

答案 1 :(得分:1)

而不是针对RUBY_PLATFORM或其他事情的容易出错的测试,您可以自己测试fork

def can_fork?
  pid = fork
  exit unless pid # exit the child immediately
  true
rescue NotImplementedError
  false
end

如果以某种方式模拟fork可能会使此检查变得昂贵,那么一个缺点就是。

答案 2 :(得分:0)

导航recent commit使用

Config::CONFIG['host_os'] !~ /mswin|mingw/)

测试它是否不在Windows上,

RUBY_PLATFORM !~ /java/

测试它是否不在JRuby上。但是,我知道可以将fork作为命令行开关启用。我必须研究是否有任何方式来判断它是否已被启用。

我怀疑macruby不支持,或强烈反对,分叉,并且从Marc-Andre所指的线程中,你可以用

来测试它。
 RUBY_ENGINE != "macruby"

现在所有其他平台都在那里......(正在进行中,标记为社区维基,请随时编辑)