代码之家  ›  专栏  ›  技术社区  ›  Andrew Grimm atk

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

  •  3
  • Andrew Grimm atk  · 技术社区  · 14 年前

    是否可以确定您正在运行的ruby实现是否能够支持 fork ,而没有针对 RUBY_PLATFORM 它会一直膨胀到 summons Cthulhu ?

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

    编辑 :我试过马克·安德烈的建议。默认情况下禁用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 回复  |  直到 7 年前
        1
  •  3
  •   Marc-André Lafortune    14 年前

    在Ruby 1.9中:

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

    对于Ruby 1.8或JRuby(目前还没有实现这一点),您必须实际测试它。

    你也看到了吗 long discussion 在ruby内核上。

        2
  •  1
  •   gix    14 年前

    而不是针对RUBY_平台或其他可以测试的东西进行容易出错的测试 fork 本身:

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

    一个不利因素是 某种程度上被模仿了,这可能会让这张支票变得昂贵。

        3
  •  0
  •   Andrew Grimm    14 年前

    A. recent commit 使用rails

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

    测试它是否不在Windows上,以及

    RUBY_PLATFORM !~ /java/
    

    测试它是否在JRuby上。然而,我知道这是有可能的 fork 作为命令行开关。我得调查一下是否有办法判断它是否被启用了。

    我怀疑macruby不支持或强烈反对分叉,从Marc Andre提到的线程来看,您可以使用

     RUBY_ENGINE != "macruby"
    

    现在对于所有其他平台来说。。。(正在进行中,标记为社区维基,请随意编辑)