module Spoon
Constants
- P_NOWAIT
Public Class Methods
posix_spawn(path, file_actions, spawn_attr, argv, env = ENV)
click to toggle source
# File lib/spoon/unix.rb, line 85 def self.posix_spawn(path, file_actions, spawn_attr, argv, env = ENV) pid_ptr, argv_ptr, env_ptr = _prepare_spawn_args(argv, env) error = LibC.posix_spawnp(pid_ptr, path, file_actions, spawn_attr, argv_ptr, env_ptr) raise SystemCallError.new(path, error) unless error == 0 get_pid(pid_ptr) end
posix_spawnp(file, file_actions, spawn_attr, argv, env = ENV)
click to toggle source
# File lib/spoon/unix.rb, line 92 def self.posix_spawnp(file, file_actions, spawn_attr, argv, env = ENV) pid_ptr, argv_ptr, env_ptr = _prepare_spawn_args(argv, env) error = LibC.posix_spawnp(pid_ptr, file, file_actions, spawn_attr, argv_ptr, env_ptr) raise SystemCallError.new(file, error) unless error == 0 get_pid(pid_ptr) end
spawn(*args)
click to toggle source
# File lib/spoon/unix.rb, line 99 def self.spawn(*args) posix_spawn(args[0], nil, nil, args, ENV) end
spawnp(*args)
click to toggle source
# File lib/spoon/unix.rb, line 103 def self.spawnp(*args) posix_spawnp(args[0], nil, nil, args, ENV) end
Private Class Methods
_prepare_spawn_args(argv, env)
click to toggle source
# File lib/spoon/unix.rb, line 172 def self._prepare_spawn_args(argv, env) pid_ptr = FFI::MemoryPointer.new(:pid_t, 1) args_ary = argv.inject(PointerArray.new) { |ary, str| ary << FFI::MemoryPointer.from_string(str) } env_ary = PointerArray.new env.each_pair { |key, value| env_ary << FFI::MemoryPointer.from_string("#{key}=#{value}") } [pid_ptr, args_ary, env_ary] end
get_pid(ptr)
click to toggle source
# File lib/spoon/unix.rb, line 130 def self.get_pid(ptr) ptr.get_int32(0) end