module Spring::SID

def self.fiddle_func

def self.fiddle_func
  @fiddle_func ||= Fiddle::Function.new(
    DL::Handle::DEFAULT['getsid'],
    [Fiddle::TYPE_INT],
    Fiddle::TYPE_INT
  )
end

def self.pgid

def self.pgid
  Process.getpgid(sid)
end

def self.sid

def self.sid
  @sid ||= begin
    if Process.respond_to?(:getsid)
      # Ruby 2
      Process.getsid
    elsif defined?(Fiddle) and defined?(DL)
      # Ruby 1.9.3 compiled with libffi support
      fiddle_func.call(0)
    else
      # last resort: shell out
      `ps -p #{Process.pid} -o sess=`.to_i
    end
  end
end