module Spoon
spoon code taken from Charles Oliver Nutter’s spoon gem github.com/headius/spoon also see blog.headius.com/2009/05/fork-and-exec-on-jvm-jruby-to-rescue.html
Public Class Methods
spawn(*args)
click to toggle source
# File lib/raad_totem/spoon.rb, line 19 def self.spawn(*args) spawn_args = _prepare_spawn_args(args) _posix_spawn(*spawn_args) spawn_args[0].read_int end
spawnp(*args)
click to toggle source
# File lib/raad_totem/spoon.rb, line 25 def self.spawnp(*args) spawn_args = _prepare_spawn_args(args) _posix_spawnp(*spawn_args) spawn_args[0].read_int end
Private Class Methods
_prepare_spawn_args(args)
click to toggle source
# File lib/raad_totem/spoon.rb, line 33 def self._prepare_spawn_args(args) pid_ptr = FFI::MemoryPointer.new(:pid_t, 1) args_ary = FFI::MemoryPointer.new(:pointer, args.length + 1) str_ptrs = args.map {|str| FFI::MemoryPointer.from_string(str)} args_ary.put_array_of_pointer(0, str_ptrs) env_ary = FFI::MemoryPointer.new(:pointer, ENV.length + 1) env_ptrs = ENV.map {|key,value| FFI::MemoryPointer.from_string("#{key}=#{value}")} env_ary.put_array_of_pointer(0, env_ptrs) [pid_ptr, args[0], nil, nil, args_ary, env_ary] end